【问题标题】:How to use managed code from unmanaged code?如何使用非托管代码中的托管代码?
【发布时间】:2010-12-10 18:39:31
【问题描述】:

如何从本机 C++(非托管代码)调用 .NET 代码?我想将 .NET 代码公开给我的非托管 (C++) 应用程序,然后使用它们。更具体地说,我想从本机 C++ 调用 C# :)。我知道有很多方法,但你能告诉我每种方法的优缺点吗?顺便说一句,我不想​​使用 COM 那么现在有什么选择?

是否可以将 C# 代码包装在 C++/CLI 中,然后从 C++ 中调用它?如果是这样,我该怎么做?如何将 C# 包装在 C++/CLI 中,然后从 C++ 中调用它?

【问题讨论】:

标签: .net c++-cli unmanaged


【解决方案1】:

您始终可以嵌入 Mono。到目前为止,我个人已经在两个项目中完成了它,这很容易。关注Embedding Mono了解更多信息。

【讨论】:

    【解决方案2】:

    我最近才写过它。它是关于 Delphi 的,但这并不意味着它也不能与 C++ 一起使用。

    .NET component in DELPHI 2009

    即使对 C++ 了解不多,我仍然知道 IUnknown 和与 COM 兼容的接口引用应该可以在 C++ 中正常使用(如果您需要传递对象,而不仅仅是结构)。

    • 您可以使用 Microsoft 的 C++/CLI 来引用您的 C# 代码并将其导出为普通的 DLL 函数。
    • 你也可以下载我写的MSBuild task,可以直接从C#导出函数。类似于 DllImportAttribute 的使用方式。

    此 C# 代码将导出一个函数“YourExportName”,该函数可以像使用任何与 c 兼容的函数一样使用。


    class Sample
    {
       [DllExport("YourExportName")]
       static int TestFunction(int left, int right)
       {
         return left + right;
       }
    }
    

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      您可以expose 将托管组件作为 COM 对象。

      【讨论】:

        猜你喜欢
        • 2011-01-29
        • 1970-01-01
        • 2010-09-18
        • 2013-08-24
        • 2012-03-04
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        相关资源
        最近更新 更多