最近需要将第三方的 DLL 封装成 csharp 的模块,可是我没有源码,只有头文件,网上综合调查了方案,最后选择了 C++/CLI

具体可见微软的官方文档

第一步,创建 CLR 项目

这里默认你已经通过各种手段获得了 DLL 和头文件
这里使用 Visual Stdio 创建一个新的 C++ CLR 项目

基本编辑

这里的基本语法还是和 C++一样的

进入项目,自行创建一个类,就会生成一个 CPP 和 H 文件
这里需要在头文件中包含 DLL 内相关函数和类定义的头文件,直接使用绝对路径包含即可

#include "path\to\your\header.h"

public ref class YourModule {
}

然后像 C++创建一个类那样,设置构造函数和成员函数,并实现
这里你的实现可以直接调用 DLL 中的函数,实现封装。

设置编译选项

右键项目,打开属性,将 Release 的配置类型修改为“动态库(. dll)”,注意这里的目标平台需要和你的 DLL 的目标平台相兼容
选择"高级",设置运行时框架,这里决定了你编译出 DLL 的运行时框架,需要与你的 CS 项目版本相同
选择 “VC++目录” -> “库目录”,将你的 DLL 文件路径写进去
选择"链接器" -> “常规” -> “附加依赖项”,添加你的 LIB 路径,然后生成项目即可

你会在项目的生成目录发现两个 DLL,这里要注意!有一个 DLL 是你生成的 DLL,还有一个 DLL 名为 Ijwhost.dll,这个 DLL 是 C++/CLI 运行时必须的依赖,需要一起打包进项目中,同时还需要打包你原来的第三方 DLL,也就是说,最后运行时需要 3个dll

导入

进入项目,将生成的模块 DLL 导入即可

参考

微软官方文档
知乎相关问答
jshchg 的博客