.net - 如何将字符串数组转换为 .NET 中的 LPCWSTR 以传递给 Win32 API 函数?

标签 .net winapi pinvoke marshalling

我有一段 C# 代码,需要将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数。我在 Marshal 类中找不到任何可以使其变得简单的内容。有人知道该怎么做吗?

最佳答案

您应该将 API 函数声明为采用字符串数组。由于它被声明为常量,因此您应该添加一个 In 属性,以便在调用后不会将其编码回来。如果该函数确实只有您指定的 unicode 版本(即,它采用 LPCWSTR 而不是 LPCTSTR),那么您应该使用 CharSet= 声明它统一码。类似于:

[DllImport("kernel32.dll", CharSet=Unicode)]
static extern bool Foo([In] string[] stuff);

您要调用什么 API 函数?如果你发布它,我可以给你一个很好的 P/Invoke 签名。或者您可以查看pinvoke.net ,它有一个非常好的预编译 P/Invoke 签名列表(社区生成)。

关于.net - 如何将字符串数组转换为 .NET 中的 LPCWSTR 以传递给 Win32 API 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/389543/

相关文章:

c# - 关于using语句的一些高级问题

c++ - 64 位全局钩子(Hook)锁定 32 位应用程序

c# - 编码(marshal) Win32 结构时的安全句柄 (PROCESS_INFORMATION)

c# - 我可以将带有 C 风格方法的 C++ 接口(interface)导出到 C# dll 吗

.net - Visual Studio 与 #Develop - 默认事件处理程序

c# - Entity Framework : adding existing child POCO to new Parent POCO, 在数据库中创建新子项

c# - 多个短期 TPL 数据流与单个长期运行的数据流

c++ - 安全取消 CopyFileEx 进程

winapi - 如何在MFC中捕获WM_SHOWWINDOW命令

c# - 返回结构时,PInvoke 仅适用于 64 位