HAMLOG開発室は、HAMLOGに関連したプログラム開発(C、パスカル、VB言語等、又はDLL)についての
専用BBSです。プログラム言語に関する投稿以外は通常のHAMLOG相談室に投稿して下さい。
HAMLOG開発室BBS

Re: WM_COPYDATAについて 投稿者:JP7CZE 川辺

> 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 に変えても同じで...ご教示いただければ幸いです.

2014/12/17(Wed) 11:12:07  [No.645]


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
Call 名前 ※必須
文字色
Eメール
タイトル sage
URL
メッセージ 手動改行 強制改行 図表モード
メッセージには上記と同じURLを書き込まないで下さい
画像File  (130kBまで)
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
プレビュー