M
Mike Tinnes
Can someone explain why this doesn't work? I'm trying to send a string
from a Win32 dll to a C# winform. The dwData and cbData members are
good, but lpData is always garbage on the .NET side.
Win32
--------------------
COPYDATASTRUCT cds;
char szText[255];
lstrcpy(szText, "testing");
cds.dwData = 0;
cds.lpData = (LPSTR)szText;
cds.cbData = sizeof(szText);
SendMessage((HWND)g_hClient, WM_COPYDATA, (WPARAM)g_hWnd,
(LPARAM)&cds);
C#
---------------------
protected override void WndProc(ref Message message)
{
switch(message.Msg)
{
case (int)WinAPI.WmDefs.WM_COPYDATA:
WinAPI.COPYDATASTRUCT st =
(WinAPI.COPYDATASTRUCT)Marshal.PtrToStructure(message.LParam,
typeof(WinAPI.COPYDATASTRUCT));
string str = Marshal.PtrToStringUni(st.lpData, st.cbData);
MessageBox.Show(str);
break;
default:
base.WndProc(ref message);
break;
}
}
from a Win32 dll to a C# winform. The dwData and cbData members are
good, but lpData is always garbage on the .NET side.
Win32
--------------------
COPYDATASTRUCT cds;
char szText[255];
lstrcpy(szText, "testing");
cds.dwData = 0;
cds.lpData = (LPSTR)szText;
cds.cbData = sizeof(szText);
SendMessage((HWND)g_hClient, WM_COPYDATA, (WPARAM)g_hWnd,
(LPARAM)&cds);
C#
---------------------
protected override void WndProc(ref Message message)
{
switch(message.Msg)
{
case (int)WinAPI.WmDefs.WM_COPYDATA:
WinAPI.COPYDATASTRUCT st =
(WinAPI.COPYDATASTRUCT)Marshal.PtrToStructure(message.LParam,
typeof(WinAPI.COPYDATASTRUCT));
string str = Marshal.PtrToStringUni(st.lpData, st.cbData);
MessageBox.Show(str);
break;
default:
base.WndProc(ref message);
break;
}
}