可能从C#调用C ++代码?
是否有可能从.NET语言(如C#)中调用可能编译为代码库文件(.dll)的C ++代码?
特别是C ++代码,如RakNetnetworking库。
调用C ++的一个简单方法是在C ++ / CLI中创build一个包装程序集。 在C ++ / CLI中,您可以调用非托pipe代码,就好像您正在编写本机代码一样,但是您可以从C#调用C ++ / CLI代码,就好像它是用C#编写的一样。 该语言基本上是与现有的图书馆互为“杀手级应用程序”devise的。
例如 – 用/ clr开关编译
#include "NativeType.h" public ref class ManagedType { NativeType* NativePtr; public: ManagedType() : NativePtr(new NativeType()) {} ~ManagedType() { delete NativePtr; } void ManagedMethod() { NativePtr->NativeMethod(); } };
然后在C#中,添加对您的ManagedType程序集的引用,并像这样使用它:
ManagedType mt = new ManagedType(); mt.ManagedMethod();
看看这个博客文章的更多解释的例子。
我不熟悉你提到的图书馆,但总的来说有两种方法可以这样做:
- P /调用导出的库函数
- 添加对COMtypes库的引用(如果你正在处理COM对象)。
P / Invoke是一个很好的技术,除了加载目标DLL文件的问题之外,它工作得很好。 我们发现,最好的方法是创build一个静态的本地函数库,并将其链接到依赖于它的托pipeC ++(或C ++ / CLI)项目中。
当然是。 这篇文章是一个很好的例子,你可以开始做这件事。
我们使用P / Invoke从Windows Mobile设备上的C#执行此操作。
用来做这件事的技术被称为P / Invoke ; 你可以search关于这个主题的文章。 请注意,它是从C#调用C,而不是C ++。 所以你需要将你的C ++代码封装在你的DLL导出的C封装器中。