Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to marshall a LPCWSTR to String in C#?

Tags:

c#

pinvoke

winapi

I'm trying to define a P/Invoke signature for the following method (defined in propsys.h)

PSSTDAPI PSRegisterPropertySchema(
    __in PCWSTR pszPath);

I've seen on the WinNT.h that PCWSTR is an alias to LPCWSTR as

typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;

And the PSSTDAPI is an alias for HRESULT

So how should be the P/Invoke signature for the PSRegisterPropertySchema method?

like image 805
CARLOS LOTH Avatar asked Jun 03 '10 20:06

CARLOS LOTH


1 Answers

After set the CharSet value to CharSet.Unicode it worked.

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

Without specifing the CharSet the function was returning 0x80070057 which is E_INVALIDARG.

like image 50
CARLOS LOTH Avatar answered Oct 14 '22 04:10

CARLOS LOTH