版本:Unity 6 (6000.0)
语言:English
创建原生 UWP 插件
使用 IL2CPP 调试 UWP 应用程序

使用 P/Invoke

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

P/Invoke 封送规则

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

  • AnsiBStr
  • Currency
  • SAFEARRAY
  • IDispatch
  • TBStr
  • VBByRefStr

P/Invoke 限制

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

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

如果您在托管代码中声明函数时出错,它将生成链接器错误,而不是运行时错误。这意味着在运行时不需要进行动态加载,并且直接调用该函数,这降低了 P/Invoke 调用的开销。

其他资源

创建原生 UWP 插件
使用 IL2CPP 调试 UWP 应用程序