Мне нужно отправить строку из C # в C ++ WindowProc. Есть несколько связанных вопросов по SO, связанных с этим, но ни один из ответов не сработал для меня. Вот ситуация:
PInvoke:
[DllImport("user32", CharSet = CharSet.Auto)]
public extern static int SendMessage(IntPtr hWnd, uint wMsg, IntPtr wParam, string lParam);
C#:
string lparam = "abc";
NativeMethods.User32.SendMessage(handle, ConnectMsg, IntPtr.Zero, lparam);
C++:
API LRESULT CALLBACK HookProc (int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
CWPSTRUCT* cwp = (CWPSTRUCT*)lParam;
...
(LPWSTR)cwp->lParam <-- BadPtr
...
}
return ::CallNextHookEx(0, code, wParam, lParam);
}
Я попробовал несколько разных вещей, выделив строку как LPStr, LPWStr, также попытался создать IntPtr из неуправляемой памяти и записать в него с помощью Marshal.WriteByte.
Указатель - это правильная ячейка памяти на стороне C ++, но данных там нет. Чего мне не хватает?