VC写的DLL发送wm_copydata消息到VB程序,接收中文字符是乱码。VC写的DLL中是这样写的:
CString strDataToSend="test";
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = strDataToSend.GetLength()+1; //这里不加1也同样有问题。
cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
::SendMessage(g_hWnd,WM_COPYDATA,0, (LPARAM)&cpd);
strDataToSend.ReleaseBuffer();VB中是这样写的:
if Msg = WM_COPYDATA Then '这种方法得到中文字符时是乱码,所以没用这种方法了。
Dim cds_Data As COPYDATASTRUCT
Dim sData$
CopyMemory ByVal VarPtr(cds_Data), ByVal lParam, ByVal Len(cds_Data)
sData = Space$(cds_Data.cbData)
CopyMemory ByVal StrPtr(sData), ByVal cds_Data.lpData, ByVal cds_Data.cbData
MsgBox sData & "," & cds_Data.cbDataEnd If
Wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)接收英文字符没有问题,但接收中文字符后,msgbox出来的总是乱码。
CString strDataToSend="test";
COPYDATASTRUCT cpd;
cpd.dwData = 0;
cpd.cbData = strDataToSend.GetLength()+1; //这里不加1也同样有问题。
cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
::SendMessage(g_hWnd,WM_COPYDATA,0, (LPARAM)&cpd);
strDataToSend.ReleaseBuffer();VB中是这样写的:
if Msg = WM_COPYDATA Then '这种方法得到中文字符时是乱码,所以没用这种方法了。
Dim cds_Data As COPYDATASTRUCT
Dim sData$
CopyMemory ByVal VarPtr(cds_Data), ByVal lParam, ByVal Len(cds_Data)
sData = Space$(cds_Data.cbData)
CopyMemory ByVal StrPtr(sData), ByVal cds_Data.lpData, ByVal cds_Data.cbData
MsgBox sData & "," & cds_Data.cbDataEnd If
Wndproc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)接收英文字符没有问题,但接收中文字符后,msgbox出来的总是乱码。
CString strDataToSend=CString("test你好!"); COPYDATASTRUCT cpd; cpd.dwData = 0;
cpd.cbData = strDataToSend.GetLength() * 2;
cpd.lpData = (void*)strDataToSend.GetBuffer(strDataToSend.GetLength());
::SendMessage(hWndTarget,WM_COPYDATA,0, (LPARAM)&cpd);
strDataToSend.ReleaseBuffer(); If uMsg = WM_COPYDATA Then
Dim cpd As COPYDATASTRUCT
CopyMemory cpd, ByVal lParam, Len(cpd)
Dim sData As String With cpd
sData = Space$(.cbData / 2)
CopyMemory ByVal StrPtr(sData), ByVal cpd.lpData, cpd.cbData
MsgBox sData & "," & Len(sData)
End With
End If