我使用vb6應用程序的WM_COPYDATA發送數據到delphi應用程序。在我的系統中,本地是英文,我正確接收數據,但在另一個帶荷蘭本地的系統上,接收文本是亂碼。從vb6到delphi的WM_COPYDATA Sendmessage是亂碼
接收應用程序是德爾福,代碼
procedure TReceiverMainForm.WMCopyData(var Msg: TWMCopyData);
var
copyDataType: TCopyDataType;
begin
copyDataType := TCopyDataType(Msg.CopyDataStruct.dwData);
//Handle of the Sender
mmoResult.Lines.Add(Format('WM_CopyData from: %d', [msg.From]));
case copyDataType of
cdtString: HandleCopyDataString(Msg.CopyDataStruct);
end;
//Send something back
msg.Result := mmoResult.Lines.Count;
end;
procedure TReceiverMainForm.HandleCopyDataString(
copyDataStruct: PCopyDataStruct);
var
s: string;
begin
s := PChar(copyDataStruct.lpData);
mmoResult.Lines.Add(s);
end;
編輯
這裏是發送數據VB6的代碼,數據正在發送的字符串
Dim buf() As Byte
ReDim buf(1 To LenB(Message))
Call CopyMemory(buf(1), ByVal Message, Len(Message))
cds.dwData = 0
cds.cbData = Len(Message) + 1
cds.lpData = VarPtr(buf(1))
' Send the string.
Dim i As Long
i = SendMessage(lHwnd, WM_COPYDATA, MainForm.hwnd, cds)
誰能告訴我做錯了什麼?
您是如何發送數據的?根據你使用的Delphi版本,字符串可以被解釋爲unicode或ANSI。如果你可以確認你的VB代碼發送方法和Delphi版本,我可以做一個合適的答案。 – Deanna
@Deanna,它有Delphi 7標記,所以你距離一半更近一些;-) – TLama
我看到這意味着它正在進行ANSI轉換。在我可以給出明確答案之前,我仍然需要知道VB6代碼。 [D7似乎支持寬字符,但用戶界面不](http://stackoverflow.com/a/2281327/588306)。 – Deanna