是否可以从 .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)项目。

是,它被称为 P /调用

下面是一个很好的资源站点使用它与Win32 API的:

http://www.pinvoke.net/

当然是。 本文是的东西,你可以做一个很好的例子上手这一点。

我们使用我们的Windows Mobile设备上做到这一点从C#的P / Invoke

用于执行此操作的技术被称为 P /调用;您可以搜索关于这个问题的文章。需要注意的是从C#调用C,而不是C ++这么多。所以,你需要换你的C ++代码在一个C包装,你的DLL导出。

你有没有考虑阿帕奇节俭?

http://thrift.apache.org/

这似乎是一个非常非常纯溶液。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top