是否可以在非托管VC ++应用程序中使用使用C#创建的DLL?

时间:2010-05-20 12:38:26

标签: c# c++ dll

我有一个用C#编写的DLL,我希望将它与C#应用程序和用非托管VC ++编写的应用程序一起使用。这可能吗?

4 个答案:

答案 0 :(得分:4)

要在此处补充其他答案,请参阅MS支持文章,其中介绍了您的方案。

http://support.microsoft.com/kb/828736

答案 1 :(得分:3)

不仅仅是COM互操作, MSDN FAQ 也列出了鲜为人知的方法:

  

2.2如何从本机Visual C ++调用.NET程序集?

     

基本上有四种方法   从本机VC ++调用.NET程序集   码。 Microsoft All-In-One Code Framework有一些工作示例   演示方法。

     
      
  1. 原生VC ++模块调用CLR Hosting APIs来托管CLR,加载和   调用.NET程序集。 (一体   代码框架示例代码:   CppHostCLR)

  2.   
  3. 如果.NET程序集可以作为COM组件公开,则为本机   VC ++模块可以调用.NET   通过.NET组装 - COM互操作。   (一体化代码框架示例   代码:CppCOMClient)

  4.   
  5. 反向PInvoke:托管代码调用本机传递委托   本机代码可以回调。   (一体化代码框架示例   代码:CSPInvokeDll)

  6.   
  7. 如果允许包含本机VC ++代码的模块enable CLR,则本机VC ++代码可以调用   .NET程序集直接通过“它   Just Works“,或”IJW“,机制。 (All-In-One代码框架示例代码:CppCLIWrapLib)

  8.   

答案 2 :(得分:3)

好吧,好像我必须再次调出我的unmanaged exports。 ; - )

2天前刚刚回答similar question。这完全适用于C#,它甚至创建了一个.lib&您的C#程序集的.exp文件将由C ++使用:

internal class Sample
{
  [DllExport("_export_test", CallingConvention.Cdecl)]
  static int Test(int a)
  {
     return a + 1;
  }
}

答案 3 :(得分:1)

您可以使C#程序集对COM可见,并以这种方式使用它。

在C#项目属性上的“程序集信息”按钮下,选择“使COM可见”。

有许多方法可以从Native C ++访问COM对象,最简单/最好的方法取决于你在做什么以及你是如何做的。