未管理到托管(.Net)

Mut*_*pan 2 .net windows unmanaged build

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

Ste*_*ung 7

包装类

您可以为DLL 编写包装类.这些很受欢迎.第三方库提供程序通常提供包装其DLL API的封装.NET程序集(用C++,C等编写)

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

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

还要考虑提供方便的重载方法,因为CLR支持它们而不是所有非托管库都支持.

COM Interop

或者,如果该非托管DLL是一个COM模块,并且您只是想按原样使用它,并且如果您使用的是Visual Studio,则只需"添加引用"即可,Visual Studio将自动为您创建一个Interop包装类.

键入库导入

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