P / Invoke:将此签名转换为托管c#

时间:2015-12-02 15:20:33

标签: c# pinvoke unmanaged managed

HRESULT WINAPI RegisterDeviceWithManagement(
  _In_ LPCWSTR ppszMDMServiceUri,
  _In_ LPCWSTR pszUPN,
  _In_ LPCWSTR ppzsAccessToken
);

我想将其转换为Dllimport c#signature。 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:4)

这很简单:

  • HRESULT类型是无符号的32位整数,因此uint。您可能有理由使用int,因为签名类型在托管代码中更容易使用。但是,由于您不太可能在HRESULT上执行算术,因此我可能会使用uint
  • WINAPI宏扩展为stdcall调用约定,这恰好是默认值,因此我们可以省略调用约定。如果您希望明确,请添加CallingConvention = CallingConvention.Stdcall
  • 字符串都是Unicode字符串,因此我们使用CharSet.Unicode

所以翻译是:

[DllImport(dllname, CharSet = CharSet.Unicode)]
static extern uint RegisterDeviceWithManagement(
    string ppszMDMServiceUri,
    string pszUPN,
    string ppzsAccessToken
);

显然你需要填写DLL的名称。