Как преобразовать строковый массив в LPCWSTR в .NET для передачи в функцию Win32 API? - PullRequest
2 голосов
/ 23 декабря 2008

У меня есть фрагмент кода C #, который должен преобразовать строковый массив в LPCWSTR для передачи в функцию Win32 API. Я не могу найти ничего в классе Маршала, который делает это простым. Кто-нибудь знает, как это сделать?

1 Ответ

3 голосов
/ 23 декабря 2008

Вы должны объявить функцию 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.

...