C# 公开ISO C++;C类# 我需要把一些C++类暴露给C(我在Linux上使用MUNO构建,所以COM不是选项)
到目前为止,我收集的证据表明,解决这一问题的最佳方法是:C# 公开ISO C++;C类# 我需要把一些C++类暴露给C(我在Linux上使用MUNO构建,所以COM不是选项),c#,c++,mono,c++-cli,pinvoke,C#,C++,Mono,C++ Cli,Pinvoke,到目前为止,我收集的证据表明,解决这一问题的最佳方法是: 在ISO C++类的周围编写包装器C++ .NET类 从C++ 的目标的“最佳”方式吗? 不过,到目前为止,我还没有看到任何实际演示如何实现这一点的示例—有人能推荐一些链接或代码片段来演示如何为虚拟类实现这一点吗 如何将C++消息中的异步消息通知发送到C代码?理想情况下,我想让C#类引发一个事件,将接收到的数据作为参数 您不能在Linux上使用Mono编写C++/.NET类。MNO不支持托管C++或C++ + CLI,因此无法“围绕ISO
-
首先,这是实现ISO C++类到C?< /LI>的目标的“最佳”方式吗?
- 不过,到目前为止,我还没有看到任何实际演示如何实现这一点的示例—有人能推荐一些链接或代码片段来演示如何为虚拟类实现这一点吗 如何将C++消息中的异步消息通知发送到C代码?理想情况下,我想让C#类引发一个事件,将接收到的数据作为参数
- 您不能在Linux上使用Mono编写C++/.NET类。MNO不支持托管C++或C++ + CLI,因此无法“围绕ISO C++类编写包装器C++ .NET类”。
<> P>您最好的选择是为C++类生成一个C API,可以通过.< /p>访问
也就是说,一种简化的方法是使用它为您生成包装器。它支持C++类(以及包装器到其他语言)的C包装,并且在Linux/Muno.</P>上运行良好。
编辑: 有关官方“Mono不支持混合模式C++/CLI”,请参阅: 需要注意的是,任何编译成纯IL的语言都应该在Mono下工作。有些语言如微软的托管C++并不总是编译为纯IL,所以它们不会总是如预期那样工作,因为它们不是真正的平台无关。
<本地交互的P>C++/CLI要求非纯IL,因此它不能在Muno上工作。 < P>您必须在像这样的ISO/C++类的C++版上写一个C++管理的Wrp*。
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;
};
我希望这有帮助
关于
单声道最近在C++(Chanp)互操作性方面有了相当大的进步。 简而言之,新的CXXI技术允许C#/.NET开发人员:
- 从C++代码 中调用C++类中的C++方法
- C++类的子类C++ < /LI>
- 用C++方法超越C++方法< /LI>
- 将C++类或混合的C++/C类类实例暴露为C代码和C++,就像它们是本机代码一样。
CXXI是谷歌代码暑期的两个夏天的成果,旨在提高单语言与C++语言的互操作性。p> 这在Linux/Mono上不起作用。Mono不支持混合模式程序集(或C++/CLI)。我同意Reed Copsey的观点。基本上在C++库上写一个C包装器,然后用C/L使用P/Unjk与C包装器进行接口。我发现以下参考在与本机库交互时非常有用:@Reed:您确定不能使用C++/.Net吗?你能给我发个链接吗?我需要把它给一个坚持认为是的人看possible@Stick这是一个Mono开发者的答案:我会看看是否能找到一个更“官方”的来源,但它不受支持。@Stick to THE MAN:我编辑我的答案是为了向你展示更多细节-Mono的语言页面讨论了这一点,就在上面,这是单声道的。混合模式C++ + CLI仍然不支持,但它们有自己的方式与本地C++集成。我同意贾斯廷,Muno的CXXI更适合于两个世界之间的互操作,因为它不需要奇怪的C++相同的语言扩展。