我想在c ++项目(visual studio 2003)中使用c#(visual studio 2008)制作的dll。怎么做 ?请heeelp
答案 0 :(得分:13)
不仅仅是COM互操作, MSDN FAQ 也列出了鲜为人知的方法:
2.2如何从本机Visual C ++调用.NET程序集?
基本上有四种方法 从本机VC ++调用.NET程序集 码。 Microsoft All-In-One Code Framework有一些工作示例 演示方法。
原生VC ++模块调用CLR Hosting APIs来托管CLR,加载和 调用.NET程序集。 (一体 代码框架示例代码: CppHostCLR)
如果.NET程序集可以作为COM组件公开,则为本机 VC ++模块可以调用.NET 通过.NET组装 - COM互操作。 (一体化代码框架示例 代码:CppCOMClient)
反向PInvoke:托管代码调用本机传递委托 本机代码可以回调。 (一体化代码框架示例 代码:CSPInvokeDll)
- 醇>
如果允许包含本机VC ++代码的模块enable CLR,则本机VC ++代码可以调用 .NET程序集直接通过“它 Just Works“,或”IJW“,机制。 (All-In-One代码框架示例代码:CppCLIWrapLib)
答案 1 :(得分:1)
您无法直接使用非托管C ++代码中的.NET程序集。一种可能的解决方案是使用regasm.exe实用程序将程序集公开为COM对象,然后从C ++中使用它。请注意,需要作为COM对象公开的.NET类型可能需要使用[COMVisible(true)]
属性进行修饰,并且仍然需要在运行C ++代码的目标计算机上安装.NET框架。
答案 2 :(得分:1)
有很多方法可以做到这一点。
C#DLL是COM DLL吗?如果是这样,您可以使用常规COM API /规范在C ++程序中访问它。有许多关于使C#DLL COM可见的教程。它并不困难,基本上只有一些编译开关和C#属性。
否则,您可以使用/clr编译器开关编译C ++项目吗?如果是这样,您可以使用Using Directive直接导入C#DLL。
答案 3 :(得分:1)
正如达林所说,一种方式是通过COM。另外两种方式(我知道)是:
答案 4 :(得分:1)
设置"解析#using References" (Project-> C / C ++ - > General)编译器选项到包含所需程序集的目录,然后在代码中放置这样的行。
#using <NiftyAssembly.dll>
答案 5 :(得分:0)
制作库文件[.Tlb]文件,然后我们才能使用dll。您必须制作原始c#DLL的.TLB(类型库文件),并在VC ++代码中使用该.TLB库。为此,您必须在您的电脑上注册.TLB文件,并且必须在您的vc ++ apllication中导入该.TLB文件。 编写C#DLL时,请记住使用将在类中实现的接口。