在项目c ++中使用c#dll

我想在c ++项目中使用c#(visual studio 2008)制作的dll(visual studio 2003)。 怎么做 ? 请嘿嘿

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

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

基本上有四种方法可以从本机VC ++代码调用.NET程序集。 Microsoft All-In-One代码框架具有演示方法的工作示例。

  1. Native VC ++模块调用CLR Hosting API来托管CLR,加载和调用.NET程序集。 (All-In-One代码框架示例代码:CppHostCLR)

  2. 如果.NET程序集可以作为COM组件公开,则本机VC ++模块可以通过.NET – COM interop调用.NET程序集。 (All-In-One代码框架示例代码:CppCOMClient)

  3. 反向PInvoke:托管代码调用本机传递本机代码可以回调的委托。 (All-In-One代码框架示例代码:CSPInvokeDll)

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

您不能直接使用非托管C ++代码中的.NET程序集。 一种可能的解决方案是使用regasm.exe实用程序将程序集公开为COM对象,然后从C ++中使用它。 请注意,需要作为COM对象公开的.NET类型可能需要使用[COMVisible(true)]属性进行修饰,并且仍然需要在运行C ++代码的目标计算机上安装.NET框架。

有很多方法可以做到这一点。

C#DLL是COM DLL吗? 如果是这样,您可以使用常规COM API /规范在C ++程序中访问它。 有许多关于使C#DLL COM可见的教程。 它并不困难,基本上只有一些编译开关和C#属性。

否则,你可以使用/ clr编译器开关编译你的C ++项目吗? 如果是这样,您可以使用Using Directive直接导入C#DLL。

正如达林所说,一种方式是通过COM。 另外两种方式(我知道)是:

  • 您可以在C ++中创建混合模式DLL。 该DLL可以包含和调用托管代码,但它也可以导出非托管函数,如普通的C ++ DLL。 它可以像任何其他C ++ DLL一样包含在内
  • 这要困难得多,但你也可以主持CLR。 谷歌的“CLR托管”,以查找有关API或样本的详细信息。

在将“Resolve #using References”(Project-> C / C ++ – > General)编译器选项设置到包含所需程序集的目录之后,然后在代码中添加这样的行。

 #using  

制作库文件[.Tlb]文件,然后我们才能使用dll。 您必须创建原始c#DLL的.TLB(类型库文件),并在VC ++代码中使用该.TLB库。 为此,您必须在您的电脑上注册.TLB文件,并且必须在您的vc ++ apllication中导入该.TLB文件。 编写C#DLL时,请记住使用将在类中实现的接口。