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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.