是否可以调用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相关问答推荐

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

获取Ef-Core集合的DeleteBehavior

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

EFCore.DbSet.Update 方法添加新行而不是更新它

Azure SignalR 和微服务

使用 PowerShell 从文件夹中获取文件名的最快\最好的方法是什么?

System.IO.Directory.Exists 在 LINQ 语句中失败,但在 foreach 循环中没有

是否可以将 SandCastle 创建的两个页面合并到一个主页中?

如何调试 .NET 运行时中的内部错误?

"投掷;" 是什么意思?靠自己做什么?

C# 有办法给我一个不可变的字典吗?

如何在不丢失数据的情况下重命名 Entity Framework 5 Code First 迁移中的数据库列?

Mono 是树莓派

MemoryStream.Close() 或 MemoryStream.Dispose()

List 和 IEnumerable 的实际区别

等待 Async Void 方法调用以进行单元测试

Visual Studio 类图不显示关系

可以从 C# 调用 C++ 代码吗?

在 WPF 中设置 Tab 键顺序

SqlParameter 已被另一个 SqlParameterCollection 包含 - using() {} 作弊吗?