我有一个使用C ++ / CLI项目的代码库,它通过瘦包装类将C ++类公开给CLR。例如......
C ++项目中的C ++代码
class Foo {
public Foo(bool wat) { /* do the things */ }
};
混合模式程序集中的C ++ / CLI代码(C ++ / CLI项目)
public ref class ManagedFoo {
Foo * foo;
public:
ManagedFoo (bool wat) { foo = new Foo(wat); }
!ManagedFoo () { delete foo; }
~ManagedFoo () { this->!ManagedFoo (); }
};
据我所知,混合模式程序集几乎只能在Windows .NET上运行。我希望我不需要重新考虑组件并使用P/Invoke
,这将为我提供跨平台支持。
有谁知道.NET Core是否支持混合模式程序集?欢迎其他想法。
答案 0 :(得分:5)
C ++ / CLI上下文中的非托管代码始终是特定于平台的,并针对特定操作系统(Windows)和特定CPU体系结构(x86 / x64)进行编译。 C ++ / CLI中的非托管代码最终与使用C ++编译器编译的实际C ++代码非常相似。由于混合模式程序集可以包含本机代码,因此它们绑定到特定的OS和CPU体系结构。
编辑(2019年3月):这个答案早于.Net Core,可能在Core环境中已经过时了。答案 1 :(得分:2)
.NET Core是否使用混合模式程序集取决于平台特定的代码。对混合模式程序集的支持正在:
https://github.com/dotnet/coreclr/issues/18013
据我了解,这将需要重新编译C ++ / CLI项目以.NET Core为目标。
当然,带有x86代码的Windows混合模式程序集只能在Windows中用作x86,依此类推。