Marshalling char16_t* and wchar_t* produces the wrong marshalling type. Windows, MSVC++ to C#. C++ signature: `void Log(const char16_t* str)` will produce: `void _LogDelegateHook(global::System.IntPtr __instance, [MarshalAs(UnmanagedType.LPUTF8Str)] string str)` Here, `LPUTF8Str` is wrong. char16_t is UTF16-LE. Tests confirm using `LPWStr` would fix it.