У меня есть фрагмент кода C #, который должен преобразовать массив строк в LPCWSTR для передачи функции Win32 API. Я не могу найти ничего в классе Маршал, что упрощало бы задачу. Кто-нибудь знает, как это сделать?
Как преобразовать массив строк в LPCWSTR в .NET для передачи функции Win32 API?
Asked
Viewd1502
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 / Вызов подписей.