Как преобразовать массив строк в LPCWSTR в .NET для передачи функции Win32 API?

Asked
Viewd1502

2

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

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 / Вызов подписей.