PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
19430 | 03/05/06 19:56:26 | RE(4):PB6.5: API関数 ReadFileについて By Taka |
19426 | 03/05/06 14:54:14 | RE(3):PB6.5: API関数 ReadFileについて By 成 |
19391 | 03/04/25 18:06:49 | RE(2):PB6.5: API関数 ReadFileについて By あすかちゃんの父 |
19380 | 03/04/24 01:59:10 | RE(1):PB6.5: API関数 ReadFileについて By Taka |
19377 | 03/04/23 18:00:00 | PB6.5: API関数 ReadFileについて By 成 |
カテゴリ:PowerBuilderの不具合?
日付:2003年04月24日 01:59 発信者:Taka
題名:RE(1):PB6.5: API関数 ReadFileについて
成さん、こんばんは。
受け取るバッファが81バイト以上確保されているという前提でコメントします。
>PBで宣言したReadfileで受信すると
>81バイトでないデータになって受取る時があるのですが
これは、関数呼出し後に引数lpNumberOfBytesReadに入ってきた値が81でないという意味ですか?
それとも、上記引数は81なのに、lpBufferの文字列が81バイトより短いという事ですか?
もし後者なら、受け取った文字列の中にNULL文字(0x00)が含まれている可能性があります。
PBのString変数では、メモリ上は0x00で区切られたデータも格納できますが、
そのデータを参照する段階で0x00の直前までしか見てくれません。
このようなデータを扱う場合、Blob型 もしくは char[] で宣言し、処理するロジックを工夫してみてくださ
い。
ちなみに、キャリッジリターン(CRLF)って2バイトじゃないですか?
あと、ポートをオープンする際のCreateFile()で FILE_FLAG_OVERLAPPED フラグを指定していませんか?
この場合、ReadFile()で読み取れるタイミングが非同期になるので、ある程度時間のかかる処理だと
完全にデータを受け取る前にReadFile()が終わることがあります。
FILE_FLAG_OVERLAPPEDフラグを指定した場合、ReadFileにはOVERLAPPED構造体のポインタを指定し、
非同期でも正しく受信できるような処理を書く必要があります。
それをしない場合、FILE_FLAG_OVERLAPPEDフラグを指定せずにCreateFile()してください。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.