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++ 側の正しいメモリ位置ですが、データはそこにありません。私は何が欠けていますか?