HAMLOG プログラム開発室


新着表示
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
649
2014/12/17(Wed) 20:58:19
JP7CZE 川辺
> はい、cmmd = 115 などのTHWからの受け取りの件だと思います。
> WindowProc() で取得出来る状態のソースをお願いします。
> こちらで動かして受け取ったデータを見てみます。

今さっき,検証用のVBソース等を送らさせていただきました.
よろしくご検討いただければ幸いです.

いくつかlpDataの結果を表示させていますが,
一番上はバイナリーダンプデータ
2番目は,&H00 を除くlpData
3番目は,私が強引に取得している本来の(?)テキストデータです.

*他の人には何のことやらわからずに,すみませんm(__)m
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
648
2014/12/17(Wed) 20:04:37
JA2BQX 太田
こんばんは。


> たくさんあるウィンドウ・ソースの一部分なので,
> 切り出して新規のウィンドウで作りますので,しばらくお時間下さい.

はい、cmmd = 115 などのTHWからの受け取りの件だと思います。
WindowProc() で取得出来る状態のソースをお願いします。
こちらで動かして受け取ったデータを見てみます。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
647
2014/12/17(Wed) 18:24:56
JP7CZE 川辺
> こんにちは。
> 最近はVB6は殆ど使わなくなっていますが
> 状況を再現出来るソースを送っていただければこちらでもテストして見ますが....。

太田さん,ありがとうございます.

たくさんあるウィンドウ・ソースの一部分なので,
切り出して新規のウィンドウで作りますので,しばらくお時間下さい.

よろしくお願いします.
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者
参照先
Re: WM_COPYDATAについて
646
2014/12/17(Wed) 11:30:06
JA2BQX 太田

こんにちは。
最近はVB6は殆ど使わなくなっていますが
状況を再現出来るソースを送っていただければこちらでもテストして見ますが....。
メルアドは私のHPのTopにあります。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
645
2014/12/17(Wed) 11:12:07
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 に変えても同じで...ご教示いただければ幸いです.
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
644
2014/12/16(Tue) 22:08:07
JG1MOU浜田
「取得」ではなく「送る」でした。
http://hamlog.no.coocan.jp/mou/index.html
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
643
2014/12/16(Tue) 10:31:50
JA2BQX 太田
こんにちは。

> 別件ですけど、ちょっと修正しました。
> http://hamlog.no.coocan.jp/mou/index.html

> ・WM_COPYDATA コマンド15で、チェックボックスの状況をRemarks2の次の行で取得。

上記の件、テストし確認しました。
ただ 15 は 115 の単なるタイプミスですね。(済みません、あげあしとりのつもりではありません)

送る時に桁数+1をしてみましたが特に変化は無いようですが今後は桁数+1にします。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
642
2014/12/15(Mon) 21:58:39
JG1MOU浜田
> はい、VB6もVB2010の時も単に文字列の長さを指定しています。 勿論全角は半角換算の2ですが。

やはり文字列の長さ+1が正解なのかもしれません。
文字列の長さ+1=バッファの長さ ですから。

構造体の内容を送る場合を考えると、納得です。
cds.cbData = sizeof(STRUCT);

別件ですけど、ちょっと修正しました。
http://hamlog.no.coocan.jp/mou/index.html
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

Re: WM_COPYDATAについて
641
2014/12/15(Mon) 21:17:15
JA2BQX 太田
こんばんは。
コマンド30の追加ありがとうございました。順調に動作しています。

> 文字列を送る場合、C言語では最後の0x00が必要なので、文字列の長さ
> +1が正解みたいです。
> たぶん、PASCALやBASICでは大丈夫なのでしょう。

はい、VB6もVB2010の時も単に文字列の長さを指定しています。 勿論全角は半角換算の2ですが。
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop
タイトル
記事No
投稿日
投稿者

WM_COPYDATAについて
640
2014/12/15(Mon) 19:01:14
JG1MOU浜田
ドキュメントに間違いがあったみたいです。
文字列を送る場合、C言語では最後の0x00が必要なので、文字列の長さ
+1が正解みたいです。
HAMLOG本体では+1してましたが、道の駅Get'sでは+1してませんでした。
たぶん、PASCALやBASICでは大丈夫なのでしょう。
C++でも+1しなくても動くのかもしれませんが、ネット上のコードを
見ていると、strlen("文字列") + 1が多いみたいです。参考まで。

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);
このスレッドは管理者によってロックされていますので、返信並びに編集は出来ません!
pagetop