是否可以从.NET语言(例如C#)中调用C ++代码(可能编译为代码库文件(.dll))?
具体来说,是C ++代码,例如RakNet网络库。
Answers:
调用C ++的一种简单方法是在C ++ / CLI中创建包装程序集。在C ++ / CLI中,您可以像编写本机代码一样调用非托管代码,但可以像从C#中那样从C#调用C ++ / CLI代码。该语言基本上是通过与现有库互操作来设计的,作为其“杀手级应用”。
例如,使用/ 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 / Invoke是一项很好的技术,除了加载目标DLL文件中的问题外,它运作得还不错。我们发现,做事的最佳方法是创建一个本机函数的静态库,并将其链接到依赖于它的Managed C ++(或C ++ / CLI)项目中。
当然可以 本文是一个很好的例子,您可以做一些入门。
我们使用P / Invoke在Windows Mobile设备上通过C#进行此操作。
用于执行此操作的技术称为P / Invoke;您可以搜索有关该主题的文章。请注意,它是用于从C#调用C,而不是C ++。因此,您需要将C ++代码包装在DLL导出的C包装器中。