> cds.dwData = 1;
> lstrcpy(buffs, "JG1MOU"); // コールサイン文字列
> cds.cbData = strlen(buffs) + 1; // ※文字列の長さ+1※
> cds.lpData = &buffs[0]; // 文字列のポインタ
> Hwnd2 = SendMessage(Hwnd1, WM_COPYDATA, (WPARAM)Form1->Handle, (LPARAM)&cds);
VB6です.戻り値の取得ですが,ちょっと困っています.
Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As String * 3927 ' void * のつもり
End Type
(lpData の3927は,やけくその値です...)
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As
Long, ByVal lParam As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any,
hpvSource As Any, ByVal cbCopy As Long)
で,
WindowProc 関数の中で,WM_COPYDATAの時に,
Dim cds As COPYDATASTRUCT
Dim buf(1 To 255) As Byte
Call CopyMemory(cds, ByVal lParam, Len(cds))
で受けているのですが,
cds.dwData と cds.cbData の値は,正しいのですが,なぜか
cds.lpDataの中身に,先頭に14byteほどのゴミが付いてきます.
なので,cds.cbData の値で cds.lpData の値を取り出しても,
正しい文字列が取れません.
仕方がないので,とりあえず,先頭の14byteを切り取って,
その後で,1byteずつゴミかどうかをチェックしながら,
正しい文字列の次のnull文字までの文字列の切り出しをしているのですが.
CopyMemory の使い方が間違っているのか,
MoveMemory に変えても同じで...ご教示いただければ幸いです.