.net - 非托管到托管(.Net)

标签 .net windows build unmanaged

是否有可能将非托管 DLL 转换为托管 DLL?

最佳答案

包装类

您可以为 DLL 编写一个包装器类。这些很受欢迎。第三方库提供商通常提供此类包装器 .NET 程序集来包装他们的 DLL API(用 C++、C 等编写)

在您的包装类中,只需DllImport 库DLL 中的所有API 函数。然后您可以像使用任何 .NET 类方法一样使用这些函数。

但是,在实践中,您有时必须编写自己的 .NET 兼容方法来调用那些导入的函数,因为您需要提供参数类型映射和其他检查。

还要考虑提供方便的重载方法,因为 CLR 支持它们,但并非所有非托管库都支持。

COM 互操作

或者,如果该非托管 DLL 是一个 COM 模块,而您只想按原样使用它,并且如果您使用的是 Visual Studio,则只需向它“添加引用”,Visual Studio 就会自动创建一个 Interop 包装类给你。

类型库导入

如果您的非托管 DLL 不是 COM 模块,但您仍希望将其自动转换为符合 CLR 的程序集(无需编写包装类),则必须在 IDL 文件中记录所有 API 函数。通常,如果您的库是 C++ 或 C DLL,它们将具有 C++/C 源格式的头文件,这些头文件可以很容易地重构为 IDL 文件(使用 C 语法)。然后使用 midl 为该 DLL 创建一个类型库。然后,您可以使用 tlbimp 将该类型库转换为 .NET 程序集。

关于.net - 非托管到托管(.Net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360360/

相关文章:

.net - SandCaSTLe 是一个死的项目吗?

c# - 保存到 "LocalFolder"的图像未被通知 Toast 选取?

c - Windows 上下文菜单 %1 使用错误的变音符号扩展文件名

c# - 无法通过 TCP 发送或接收消息

.net - 正则表达式太松散

.net - 隐式定义的变量会抛出运行时错误,而显式定义则不会

windows - 删除报表服务器(2014 native 模式)加密 key 和数据 [PowerShell]

build - 用于缓存的 CMake 预加载脚本

tfs - Visual Studio Team Services 构建无法找到库

c++ - 将多个源目录构建到同一个目标目录中