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++ .NET类 从C++ <中消耗C++.NET类 我有以下问题:

      首先,这是实现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++或任何其他.NET中使用现有C++类。 语言 实例化C++中的C++对象
        • 从C++代码
        • 中调用C++类中的C++方法 从C++代码中调用C++内联方法(如果您的库是用-fFieldIn函数编译的,或者提供代理) 图书馆)
        • 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++相同的语言扩展。