我需要向C#公开一些C ++类(我在Linux上构建,使用mono,因此COM不是一个选项)
到目前为止我收集的证据表明,解决这个问题的最佳方法是:
我有以下问题:
答案 0 :(得分:8)
您不能使用Mono在Linux上执行C ++ / .NET类。 Mono不支持托管C ++或C ++ / CLI,因此无法“围绕ISO C ++类编写包装器C ++ .Net类”。
您最好的选择是为您的C ++类生成一个C API,可以通过Platform Invoke访问。
话虽如此,缓解此问题的一个选择是使用SWIG为您生成包装器。它支持从C ++类生成C#包装器(以及其他语言的包装器),并且在Linux / Mono上运行良好。
编辑:
对于官方“Mono不支持混合模式C ++ / CLI”,请参阅Languages page:
重要的是要注意,任何编译为纯IL的语言都应该在Mono下工作。某些语言(如Microsoft的托管C ++)并不总是编译为纯IL,因此它们并不总是按预期工作,因为它们不是真正独立于平台的。
本地互操作的C ++ / CLI需要非纯IL,因此它不适用于Mono。
答案 1 :(得分:3)
Mono最近在CXXI(发音性感)中与C ++互操作性取得了一些相当大的进步。
From this posting,简短的故事是新的CXXI技术允许C#/ .NET开发人员:
CXXI是Google的Summer of Code两个夏季工作的结果,旨在提高Mono与C ++语言的互操作性。
答案 2 :(得分:0)
public ref class MyWrapper
{
public:
MyWrapper (void)
{
pObj = new CMyUnmanagedClass();
}
~MyWrapper (void)
{
delete pObj;
}
int foo(void)
{
//pass through to the unmanaged object
return pObj->foo();
}
private:
CMyUnmanagedClass* pObj;
};
我希望这有帮助 问候