如何使用非托管代码中的托管代码?

时间:2009-10-28 07:37:39

标签: .net c++-cli unmanaged

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

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

4 个答案:

答案 0 :(得分:5)

我刚刚写过这篇文章。这是关于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;
   }
}

答案 1 :(得分:1)

你总是可以嵌入Mono。到目前为止,我亲自在两个项目中完成了它,这很容易。关注Embedding Mono以获取更多信息。

答案 2 :(得分:0)

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

答案 3 :(得分:0)