在 C++ 中使用显式 PInvoke(DllImport 特性)

.NET Framework 提供具有 Dllimport 属性的显式平台调用(或 PInvoke)功能,以允许托管应用程序调用在 DLL 中打包的未托管的函数。 对于非托管 API 打包为 DLL 且源代码不可用的情况,需要显式 PInvoke。 例如,调用 Win32 函数需要 PInvoke。 在其他情况下,请使用隐式 PInvoke;有关详细信息,请参阅使用 C++ 互操作(隐式 PInvoke)

PInvoke 通过使用 DllImportAttribute 运行。 此属性将 DLL 的名称作为其第一个参数,位于要使用的每个 DLL 入口点的函数声明之前。 函数的签名必须与 DLL 导出的函数的名称一致(但可通过根据托管类型定义 DllImport 声明来隐式执行某些类型转换。)

结果是每个本机 DLL 函数的托管入口点,其中包含必要的转换代码(或 thunk)和简单的数据转换。 然后,托管函数可以通过这些入口点调用 DLL。 作为 PInvoke 的结果插入到模块的代码是完全托管的。

本节内容

另请参阅

从托管代码调用本机函数