« バッファからの行読み込み | メイン | とりあえず完成 »
2005年01月20日
mixi Alert 開発日誌:: C++でWinINet
Tweet @jin1016をフォロー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