是否有可能将非托管 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/