Как маршалировать LPCWSTR в строку в C #? - PullRequest
5 голосов
/ 04 июня 2010

Я пытаюсь определить сигнатуру P / Invoke для следующего метода (определенного в propsys.h)

PSSTDAPI PSRegisterPropertySchema(
    __in PCWSTR pszPath);

Я видел на WinNT.h, что PCWSTR является псевдонимом LPCWSTR как

typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;

А PSSTDAPI является псевдонимом для HRESULT

Так как должна быть подпись P / Invoke для метода PSRegisterPropertySchema?

1 Ответ

8 голосов
/ 04 июня 2010

После установки значения CharSet на CharSet.Unicode все заработало.

[DllImport("Propsys.dll", CharSet=CharSet.Unicode)]
static internal extern int PSRegisterPropertySchema(String pszPath);

Без указания CharSet функция возвращала 0x80070057, что составляет E_INVALIDARG.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...