我非常熟悉 C++,所以我考虑学习 .NET 及其所有衍生产品(尤其是 C#)。
一路上我碰到了 C++/CLI,我想知道该语言是否有任何特定用途?它只是假设是一种从原生 C++ 转换为 C# 的中间语言吗?
另一个突然出现在我脑海中的问题是为什么 .NET Framework 中仍然有那么多编程语言? (VB、C++/CLI、C#...)
最佳答案
是的,C++/CLI 有一个非常具体的目标用法,该语言(及其编译器,最重要的是)使得编写需要与非托管代码互操作的代码变得非常容易。它内置了对托管类型和非托管类型之间编码(marshal)处理的支持。它曾经被称为 IJW(It Just Works),现在被称为 C++ Interop。其他语言需要使用 P/Invoke 编码器,与 C++/CLI 相比,它可能效率低下且功能有限。
如果您需要与 native C++ 互操作,类具有实例函数并且需要 new 和 delete 关键字来创建/销毁该类的实例,那么您别无选择,只能使用 C++/CLI。 Pinvoke 无法做到这一点,只有 C++ 编译器知道要分配多少内存以及如何正确地将 this 指针转换为实例函数。
.NET 框架包含用 C++/CLI 编写的代码,特别是在 System.Data 和 WPF 的 PresentationCore 中。如果您没有非托管互操作需求或不必使用遗留代码库,那么没有理由选择 C++/CLI。 C# 或 VB.NET 是更好的选择。 C++/CLI 的功能集在 2005 年左右卡住,它不支持最近添加的功能,如 lambda 或 Linq 语法。 IDE 也不支持 C# 和 VB.NET IDE 中可用的许多附加功能。值得注意的是,VS2010 最初将不提供对 C++/CLI 的 IntelliSense 支持。有点像死亡之吻。
更新:在 VS2012 中恢复,IntelliSense 支持又回来了。至少要感谢 C++/CX,这是一种语言扩展,可以简化用 C++ 编写 WinRT 应用程序的过程。它的语法与 C++/CLI 非常相似。 Windows 窗体项目模板已删除,但设计器仍然有效。 VS2012 中新的调试引擎不支持 C++/CLI,您必须在“工具”+“选项”、“调试”、“常规”中打开“托管兼容模式”选项。
关于c# - C++/命令行界面 : why should I use it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933210/
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我有一个问题。我想从另一个ruby脚本运行一个ruby脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密
有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/