(参考:http://hsp.tv/play/pforum.php?mode=pastwch&num=45426)
#deffunc brsendA int p1,str p2 st=p2 dim cds,3 msize = strlen(p2) cds(0) = 0 cds(1) = msize cds(2) = varptr(st) sendmsg p1, 0x004a, hwnd, varptr(cds) return
この命令で、p1(ウィンドウハンドル)に対してstという文字列データ(が入ったメモリアドレス?)を送信することができるのですが、
これを随時行うと、たまに(よく)文字列の最後におかしな文字列が付属します。
途中でcds(1)の部分が間違ってしまうのか、原因がわかりません。
誰か知っている人はいらっしゃいますでしょうか?
いらっしゃいましたら、ぜひその原因を教えていただきたいです。
よろしくお願いします。
備考 やりとりするときのソース
(全体ソースは400+200行ほどあるので、載せません)
<送信側(子ウィンドウ)>
(送信する際は、
#deffunc brsendA int p1,str p2 st=p2 dim cds,3 msize = strlen(p2) cds(0) = 0 cds(1) = msize cds(2) = varptr(st) sendmsg p1, 0x004a, hwnd, varptr(cds) return
このような形式で指定します。
#define brsend brsendA hdlGetmsg, "hwnd "+hwnd+"\n"+ brsend "url http://www.yahoo.co.jp/"
)
<受信側(親ウィンドウ)>
oncmd gosub *bwaitaf, 0x004a *getmessage sdim cds dupptr cds, lparam, 12 msize = cds(1) dupptr mrecv, cds(2), msize sdim msg, msize memcpy msg, mrecv, msize dialog msg notesel msg repeat notemax noteget sbuf,cnt if strmid(sbuf,0,4)="exit":exitfrag=1 if strmid(sbuf,0,4)="url ":url=strmid(sbuf,4,512) if strmid(sbuf,0,5)="name ":name=strmid(sbuf,5,512):objprm urlbox_id,url if strmid(sbuf,0,5)="hwnd ":brhwnd=int(strmid(sbuf,5,512)) if strmid(sbuf,0,8)="oncfrag ":oncfrag=int(strmid(sbuf,8,1)) if strmid(sbuf,0,12)="loadingfrag ":loadingfrag=int(strmid(sbuf,12,1)) if strmid(sbuf,0,8)="testsend":brsend "return_testsend" if strmid(sbuf,0,15)="return_testsend":msgtest-- loop return
<送信命令>
(↓展開すると)
brsend "name "+name+"\noncfrag 1\nurl "+url+"\nloadingfrag 0"
brsendA hdlGetmsg, "hwnd "+hwnd+"\n"+ "name "+name+"\noncfrag 1\nurl "+url+"\nloadingfrag 0"