C++ cli 是否可以使用C/C++;可以使用C+将程序编译到.NET可移植类库中+/CLI 我已经阅读了C++中的.NET编程,并且在高层次上理解它可以编译C或C++到.NET MSIL。我还了解到,在这个过程中会翻译本机结构

C++ cli 是否可以使用C/C++;可以使用C+将程序编译到.NET可移植类库中+/CLI 我已经阅读了C++中的.NET编程,并且在高层次上理解它可以编译C或C++到.NET MSIL。我还了解到,在这个过程中会翻译本机结构,c++-cli,portable-class-library,cil,C++ Cli,Portable Class Library,Cil,问题是,我可以使用C++/CLI将C/C++代码库编译成.NET可移植类库吗?目的是在各种平台上使用结果,例如Xamarin平台和UWP < >编辑:对于普通C,这样做更容易吗,而不是C++(>P>简短答案): 长答覆: 据我所知,C++/CLI源代码是在“混合”模式下编译的。这意味着,如果您学习C++/CLI语言并使用它创建托管类,它们将以本机方式在.NET中运行。那很好。但是如果您只需使用现有的C++代码并编译它,结果就是本地X86/Windows代码,它不能在其他平台上使用。之所以称之为“

问题是,我可以使用C++/CLI将C/C++代码库编译成.NET可移植类库吗?目的是在各种平台上使用结果,例如Xamarin平台和UWP


< >编辑:对于普通C,这样做更容易吗,而不是C++(

>P>简短答案): 长答覆:

据我所知,C++/CLI源代码是在“混合”模式下编译的。这意味着,如果您学习C++/CLI语言并使用它创建托管类,它们将以本机方式在.NET中运行。那很好。但是如果您只需使用现有的C++代码并编译它,结果就是本地X86/Windows代码,它不能在其他平台上使用。之所以称之为“混合”,是因为编译器将本机代码和.NET IL代码放在一个可执行文件中

C++ +CLI通常用于您希望使用现有C++代码的情况下。 作为Windows中.NET程序的一部分。因此,您可以在C++/CLI中创建一个库,并在托管C++/CLI中为其创建一个接口。这个托管的C++/CLI接口是在.C++中的本地C++代码和程序的其余部分之间的桥梁。


另外,据我所知,CORECRL通常不支持C++/CLI。

简短回答:AFAIK不支持

长答覆:

据我所知,C++/CLI源代码是在“混合”模式下编译的。这意味着,如果您学习C++/CLI语言并使用它创建托管类,它们将以本机方式在.NET中运行。那很好。但是如果您只需使用现有的C++代码并编译它,结果就是本地X86/Windows代码,它不能在其他平台上使用。之所以称之为“混合”,是因为编译器将本机代码和.NET IL代码放在一个可执行文件中

C++ +CLI通常用于您希望使用现有C++代码的情况下。 作为Windows中.NET程序的一部分。因此,您可以在C++/CLI中创建一个库,并在托管C++/CLI中为其创建一个接口。这个托管的C++/CLI接口是在.C++中的本地C++代码和程序的其余部分之间的桥梁。


另外,据我所知,CoreCLR通常不支持C++/CLI。

我认为这不正确-请查看/clr:pure编译器开关。我的问题是更具体的——关于生成的MSIL是否可以打包(方便或其他)到一个可移植的类库中。只有C++的子集可以在CLR:纯模式编译。所以问题是:你的代码编译成功了吗?问题是这种方法总体上是否合理。如果该方法存在警告或限制,那么答案可能会讨论这些问题。就目前情况而言,您的答案事实上是不正确的-它指出没有办法避免本机代码-因此应该进行修改或删除。@bright:您必须在C++/CLI中声明
ref class
类型才能从外部获得可用的内容。普通C++ >代码>类< /代码>类型在定义它们的程序集之外是不可见的。这个答案是正确的,因为你不能在这里偷工减料,你必须写一些桥接代码。卢卡斯,我一点也不介意桥接代码。该问题涉及使用C++/CLI生成PCL的任何方法。你想详细说明一个有用的答案吗?感谢您的评论。这个问题还询问了普通C。C是否更容易通过C++/CLI编译成PCL?我认为这不正确-请查找/clr:pure compiler开关。我的问题是更具体的——关于生成的MSIL是否可以打包(方便或其他)到一个可移植的类库中。只有C++的子集可以在CLR:纯模式编译。所以问题是:你的代码编译成功了吗?问题是这种方法总体上是否合理。如果该方法存在警告或限制,那么答案可能会讨论这些问题。就目前情况而言,您的答案事实上是不正确的-它指出没有办法避免本机代码-因此应该进行修改或删除。@bright:您必须在C++/CLI中声明
ref class
类型才能从外部获得可用的内容。普通C++ >代码>类< /代码>类型在定义它们的程序集之外是不可见的。这个答案是正确的,因为你不能在这里偷工减料,你必须写一些桥接代码。卢卡斯,我一点也不介意桥接代码。该问题涉及使用C++/CLI生成PCL的任何方法。你想详细说明一个有用的答案吗?感谢您的评论。问题还涉及普通C。C是否更容易通过C++/CLI编译成PCL?否。C++/CLI没有“可移植性”,它需要一个模块初始值设定项来初始化CRT,从而消除了.NETCore。这消除了几乎所有的目标,您需要Windows和完整版本的框架。该语言经常与支持WinRT(又称UWP)的语言扩展C++/CX混淆,语法非常相似。但是它是纯本地的。这些语言扩展解决了相同的问题,将本地C++连接到一个外部类型系统,因此看起来非常相似。汉斯,好点。CRT要求能否得到解决?换句话说,我能提供一个调用CLR库的已用CRT函数的实现吗?您的计算机上有CRT源代码。应该足够有说服力的,这样的计划永远不会去任何地方。“在高水平[…]它可以编译C或C++到.NET MSIL”-不,C++ + CLI不能做到这一点。它将标准C和C++代码编译为平台和特定于体系结构的目标代码。C++/CLI提供了语言扩展,允许您定义编译为MSIL的
ref class
es。但它不只是采用任何标准的C或C++代码,并将其编译成可移植的MSIL代码。C++/CLI没有什么“可移植性”,它需要一个模块初始值设定项来获取CRT i