我需要从C#发送一个字符串到C++ WindowProc。与此有关的SO有许多相关的问题,但没有一个答案适用于我。这里的情况:C#发送消息到C++ WinProc
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++端的正确内存位置,但数据不在那里。我错过了什么?
你能举个例子吗? – Nayan 2010-04-16 14:33:53