Version: 6000.3
语言: 中文
创作本机 UWP 插件
使用 IL2CPP 调试 UWP 应用程序

使用 P/Invoke

P/Invoke 是一种技术,允许您从托管代码访问本机代码中的结构、回调和函数。x86 上 P/Invoke 函数的默认调用约定是__stdcall.有关详细信息,请参阅有关 P/Invoke 的 Microsoft 文档。

P/调用封送规则

P/Invoke 封送规则与 .NET 封送处理的规则相同。但是,Unity 不支持以下类型:

  • 安西BStr
  • 货币
  • 安全阵列
  • IDispatch
  • TBStr
  • VBByRefStr

P/invoke 限制

在通用 Windows 平台 (UWP) 上,无法指定动态链接库 (DLL) 名称以 P/Invoke 到特定系统库中。如果尝试对项目外部存在的任何 DLL 进行 P/Invoke,则在运行时将导致 DllNotFoundException。因此,可以使用__Internal关键字代替 DLL 名称,它将在生成项目时使用 C++ 链接器解析函数,而不是在运行时加载函数时解析函数:

    [DllImport("__Internal")]
    private static extern int CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);

如果在托管代码中声明函数时出错,则会产生链接器错误,而不是运行时错误。这意味着不需要在运行时进行动态加载,而是直接调用函数,这减少了 P/Invoke 调用的开销。

其他资源

创作本机 UWP 插件
使用 IL2CPP 调试 UWP 应用程序