61052


英語版のStack Overflowにて ReadBufferの代用について質問
した際に、回答者さんからサンプルコードを教えてもらった時にReadBytesメソッドの戻り値が1バイトを戻すことを知りました。

もらったサンプルコード

[code]

    System::Byte __fastcall ReadByte();
    
    template<typename T>
    void __fastcall Populate(T& obj, TIdIOHandler* ioh) {
        System::Byte* p = (System::Byte*) &obj;
        for(unsigned count=0; count<sizeof(T); ++count, ++p)
            *p = ioh->ReadByte();
    }
    
    BKUK_PACKET Pkt;
    Populate(Pkt, Context->Connection->IOHandler);
    
[/code]

このReadByteというメソッドの戻り値が1byte単位で出てくるということが、[TIdIOHandler.ReadBytes
Methodのヘルプ](http://ww2.indyproject.org/docsite/html/TIdIOHandler_ReadBytes@TIdBytes@Integer@boolean.html)では記載されていないと思うのですが、Indy10のヘルプサイトにReadBytesの戻り値に関する情報は記載されているサイトや確認方法はありますでしょうか？


CC BY-SA 4.0
2019-12-03T05:48:58.193
61050
2019-12-03T07:38:43.403
35993
question
c++
TIdIOHandler.ReadBytes メソッドの戻り値


メソッド名と(リンク先の)ドキュメントでパラメータの説明を読む限り、 **パラメータで指定したバイト数を読み取るメソッド**
で、指定が無ければ(明記されてないけど)1Byteずつ読み取る、という事ではないでしょうか。

>
[code]

>     procedure ReadBytes(
>         var VBuffer: TIdBytes;
>         AByteCount: Integer;
>         AAppend: boolean = true
>     ); virtual;
>  
[/code]

>
> AByteCount: Number of bytes expected in the read request.


CC BY-SA 4.0
2019-12-03T06:21:16.753
61052
2019-12-03T06:21:16.753
3060
61050
answer


回答に出ている ReadByteとReadBytesは別のメソッドです。  
そしてReadByteメソッドについてはヘルプに乗っていません。

GitHubのソースの[IdIOHandler.pas](https://github.com/IndySockets/Indy/blob/master/Lib/Core/IdIOHandler.pas#L1356)を見るとReadByteは内部で1Byteだけ読むようにReadBytesを呼び出しているようです。


CC BY-SA 4.0
2019-12-03T07:38:43.403
61054
2019-12-03T07:38:43.403
3524
61050
answer