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

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

推荐答案

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

例如-使用/clrswitch 编译此命令

#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();

查看this blog post了解更多解释的示例.

.net相关问答推荐

dotnet 8 web api在部署到docker后无法工作

Docker镜像mcr.microsoft.com/dotnet/aspnet:8.0不能在Windows上构建

获取Ef-Core集合的DeleteBehavior

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

在目录中创建应用程序快捷方式

Silverlight 与 Flex

简单委托(委托)与多播委托

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

为什么 WCF 中不允许方法重载?

日期时间是什么意思?在 C# 中是什么意思?

String.Split 仅在 C# 中的第一个分隔符上?

在 C# 中将字符串转换为十六进制字符串

当程序员说针对接口而不是对象的代码时,他们是什么意思?

Dapper 是否支持 SQL 2008 表值参数?

C#As的 VB.NET 类似功能

如何获取命名空间中的所有类?

如何以编程方式删除 WebClient 中的 2 个连接限制

如何在 nuspec 中指定特定的依赖版本?

有没有一种简单的方法来判断 .NET Framework 版本?

Roslyn 编译代码失败