2

我有一段 C# 代码需要将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数。我在 Marshal 类中找不到任何让它简单明了的东西。有人知道该怎么做吗?

4

1 回答 1

3

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

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

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

于 2008-12-23T18:14:42.153 回答