PB 電子会議室
カテゴリ:PowerBuilderの開発環境
日付:2001年06月21日 10:43 発信者:Rt
題名:RE(5):PB7.0: Socket通信 recvのロジックについて
あすかちゃんの父さん、こんにちは。
>
>同期モードの場合は定期的にrecv関数をコールしてデータを受信
>していないか確認する必要がありますので、Rtさんのロジックで
>問題ないと思います。
>ただバッファメモリ用配列lc_chkで、recv関数で受信完了した分
>シフトしながら次に受信したデータを引き取っていますよね。
>ということは引き取った分だけrecv関数の使えるバッファメモリ
>のサイズが小さくなるのに、バッファサイズ指定のll_recv_len_chk
>は3000で固定になっているので、ここで配列の境界を越えたりし
>てませんでしょうか。
越えるようなことはないと思います。
recvの第3引数(recv(SocketNo,Recv_Buf,Recv_Size,0))のRecv_Sizeは配列の要素数を
越えないように設定してあります。
>
>recv関数で引き取るためのバッファメモリと、分割して引き取っ
>たデータを結合するバッファメモリを分けた方がいいと思います。
>
どうも問題個所はMemCopyにあるようです(LOGをとってみたらMemCopyの前の行で落ちている)
MemCopy(lstr_chk,lc_chk[1],3000)
構造体のサイズは3000で配列のサイズも3000です。
PBでの構造体もしくは配列はメモリ上で連続した領域を確保していないのでしょうか?
ちなみに構造体はバウンダリングが起きないようにメンバのサイズを確保しています。
MemCopyの宣言部は
Subroutine MemCopy(ref chk_buf chk, ref char hpvSource, Long cbCopy) Library \"Kernel32.dll\" Alias
for \"RtlMoveMemory\"
です。
どなたか助けてください。
非同期にすれば解決するのでしょうか?
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Sybase SQL Anywhere Server
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.