我想在 C++ 项目(Visual Studio 2003)中使用由 C#(Visual Studio 2008)制作的 DLL。如何实现?请帮忙!
我想在 C++ 项目(Visual Studio 2003)中使用由 C#(Visual Studio 2008)制作的 DLL。如何实现?请帮忙!
除了COM互操作,MSDN FAQ还列出了一些不太为人知的方法:
2.2 如何从本机的Visual C++调用.NET程序集?
基本上有以下四种方法可以从本机VC++代码中调用.NET程序集。Microsoft All-In-One Code Framework提供了演示这些方法的工作示例。
本机VC++模块通过调用CLR Hosting APIs 来托管CLR,加载并调用.NET程序集。(All-In-One Code Framework示例代码:CppHostCLR)
如果.NET程序集可以公开为COM组件,则本机VC++模块可以通过.NET-COM互操作调用.NET程序集。(All-In-One Code Framework示例代码:CppCOMClient)
反向PInvoke:托管代码调用本机代码并传递一个委托,本机代码可以回调。(All-In-One Code Framework示例代码:CSPInvokeDll)
如果包含本机VC++代码的模块被允许启用CLR,则本机VC++代码可以通过“只需这样”,或“IJW”机制直接调用.NET程序集。(All-In-One Code Framework示例代码:CppCLIWrapLib)
你不能直接在非托管的 C++ 代码中使用 .NET 程序集。一种可能的解决方案是使用 regasm.exe 工具将程序集公开为 COM 对象,然后从 C++ 消费它。请注意,需要作为 COM 对象公开的 .NET 类型可能需要使用 [COMVisible(true)]
属性进行装饰,并且仍然需要在运行 C++ 代码的目标计算机上安装 .NET Framework。
有许多方法可以做到这一点。
C# DLL是COM DLL吗?如果是,您可以使用常规的COM API/规范在C++程序中访问它。有许多关于使您的C# DLL COM可见的教程。它不是那么困难,基本上只需要几个编译开关和C#属性。
否则,您能够使用/clr编译器选项编译您的C++项目吗?如果是,您可以使用Using Directive直接导入您的C# DLL。
正如Darin所说,一种方法是通过COM。我知道的另外两种方法是:
#using <NiftyAssembly.dll>