可以从C#调用C++代码吗?

84 .net c# c++ unmanaged managed

是否可以从.NET语言(如C#)中调用C++代码(可能编译为代码库文件(.dll))?

具体来说,C++代码,如RakNet网络库.

Ecl*_*pse 87

调用C++的一种简单方法是在C++/CLI中创建包装程序集.在C++/CLI中,您可以调用非托管代码,就像编写本机代码一样,但是您可以从C#调用C++/CLI代码,就好像它是用C#编写的一样.该语言基本上是作为其"杀手级应用程序"与现有库互操作而设计的.

例如 - 使用/ clr开关编译它

#include "NativeType.h"

public ref class ManagedType
{
     NativeType*   NativePtr; 

public:
     ManagedType() : NativePtr(new NativeType()) {}
     ~ManagedType() { delete NativePtr; }

     void ManagedMethod()
      { NativePtr->NativeMethod(); } 
}; 
Run Code Online (Sandbox Code Playgroud)

然后在C#中添加对ManagedType程序集的引用,并像这样使用它:

ManagedType mt = new ManagedType();
mt.ManagedMethod();
Run Code Online (Sandbox Code Playgroud)

查看此博客文章以获取更多解释示例.

  • 博客帖子的链接被打破:( (2认同)

Meh*_*ari 7

我不熟悉你提到的库,但一般来说有几种方法可以做到:

  • P /调用导出的库函数
  • 添加对COM类型库的引用(如果您正在处理COM对象).


pli*_*nth 7

P/Invoke是一项很好的技术,除了加载目标DLL文件的问题外,它运行得相当好.我们发现,最好的方法是创建一个本机函数的静态库,并将其链接到依赖于它的托管C++(或C++/CLI)项目.


Dan*_*olt 5

是的,它被称为P/Invoke

这是一个很好的资源站点,用于将它与 Win32 API 一起使用:

http://www.pinvoke.net/