« バッファからの行読み込み | メイン | とりあえず完成 »

2005年01月20日

mixi Alert 開発日誌:: C++でWinINet

    

perlの場合、かなりお気楽に使えるが、C/C++で使うとなると、少し事情が違った。
まず、perlの場合読み込みバッファは自動的に確保してくれるので、気にしなくても良かったが、Cの場合は明示的に確保しないといけない。
で、HttpQueryInfo( hHttpRequest, HTTP_QUERY_CONTENT_LENGTH, BufSizeText, &BufSizeTextSize, NULL); とコールするが、サイズが返ってこない。
仕方ないので、512KBぐらい確保して読み込み処理をするが、1回のInternetReadFile コールではすべてのデータを取得しきれない時があるようだ。
そこで、次のようにして読み込むこととした。

read_buff = new char[htmlSize];
memset( read_buff, 0, htmlSize );
DWORD curPos = 0, ReadSizeAll = 0;
int bootstrap = 0;
while(1)
{
    BOOL ret;
    ret = InternetReadFile( hHttpRequest, &read_buff[curPos], (htmlSize-ReadSizeAll), &ReadSize);
    if(ret && (ReadSize == 0)) break;
    curPos += ReadSize;
    ReadSizeAll += ReadSize;
    bootstrap++;
    if( bootstrap > TRY_MAX) break;
}

curPos と ReadSizeAll は同じだから両方は必要ないかも。
他はperlの時とだいたい同じでいけた。
ラッパークラスとかあると便利かも。



投稿者 Takenori : 2005年01月20日 07:11




comments powered by Disqus
Total : Today : Yesterday : なかのひと