可以从 C# 调用 C++ 代码吗?
题
是否可以从 .NET 语言(例如 C#)中调用 C++ 代码(可能编译为代码库文件 (.dll))?
具体来说,C++ 代码,例如 RakNet 网络库。
解决方案
调用 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(); }
};
然后在 C# 中,添加对 ManagedType 程序集的引用,并像这样使用它:
ManagedType mt = new ManagedType();
mt.ManagedMethod();
查看 这篇博文 以获得更详细解释的示例。
其他提示
我不熟悉你提到的库,但一般来说有几种方法可以做到这一点:
- P/调用 导出的库函数
- 添加对 COM 类型库的引用(如果您正在处理 COM 对象)。
P / Invoke是一个很好的技术,它的工作原理相当不错,除了在加载目标DLL文件的问题。我们发现,做事情最好的办法是创建的本地函数静态库,并链接到一个托管C是取决于它++(或C ++ / CLI)项目。
当然是。 本文是的东西,你可以做一个很好的例子上手这一点。
我们使用我们的Windows Mobile设备上做到这一点从C#的P / Invoke
用于执行此操作的技术被称为 P /调用;您可以搜索关于这个问题的文章。需要注意的是从C#调用C,而不是C ++这么多。所以,你需要换你的C ++代码在一个C包装,你的DLL导出。
不隶属于 StackOverflow