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

更新:2007 年 11 月

.NET Framework 通过 Dllimport 属性提供了显式平台调用(或 PInvoke)功能,允许托管应用程序调用打包在 DLL 中的非托管函数。在非托管 API 打包为 DLL 并且源代码不可用的情况下,需要使用显式 PInvoke。例如,调用 Win32 函数就需要 PInvoke。否则,请使用隐式 P{Invoke;有关更多信息,请参见使用 C++ Interop(隐式 PInvoke)

通过使用 DllImportAttribute 可使用 PInvoke。此属性将 DLL 的名称作为其第一个参数,放置于要使用的每个 DLL 入口点的函数声明之前。函数的签名必须与 DLL 导出的函数名称相匹配(对于托管类型,可通过定义 DllImport 声明隐式执行某种类型转换)。

得到的结果是每个本机 DLL 函数的托管入口点,其中包含必需的转换代码(或 thunk)和简单数据转换。然后托管函数可通过这些入口点调入 DLL。作为 PInvoke 的结果插入到模块中的代码是完全托管的,并且 /clr/clr:pure/clr:safe 编译也支持显式 PInvoke。有关更多信息,请参见纯代码和可验证代码

本节内容

请参见

概念

从托管代码调用本机函数