ソケットとか面倒そうだなぁと思って調べていると MFCには CHttpFileクラスなるものがあって簡単に HTTPサーバのファイルを取得できるようです。
早速、プロジェクトのプロパティで MFCを使用するように設定して afxinet.hをインクルードしてみました。
CInternetSession cSession(APP_NAME); CHttpFile* pHttpFile = (CHttpFile*)cSession.OpenURL(TEST_URI); DWORD dwStatus = 0; TCHAR szBuffer[BUFFER_SIZE] = _T(""); CString strXml = _T(""); pHttpFile->QueryInfoStatusCode(dwStatus); if (HTTP_STATUS_OK == dwStatus) { while (pHttpFile->ReadString(szBuffer, sizeof(szBuffer) - 1)) { strXml.Append(szBuffer); } } pHttpFile->Close(); cSession.Close();
最初、QueryInfoStatusCode()の引数を pHttpFile->QueryInfoStatusCode(&dwStatus);として いきなりコンパイルエラーを出してしまいました。
これが参照というやつでしょうか。早くも??が飛び始めています。
またデータ自体は随分簡単に取得できたのですが 文字コードまでは面倒を見てくれないようで、取得したデータは文字化けしていました。 そもそも非MFCプロジェクトの中で afxinetだけ使っていいものかどうかもわかっていません。
このままMFC(& C++)を勉強するか、Win32APIだけで頑張るか悩みどころですね。
2 件のコメント:
もう不要かもしれませんが・・・文字コードの変換はIMultiLanguageを利用するといいと教わった事があります。残念ながら私は使ったことはないのですが。
ただXMLのデータならUTF8のものが多いですから、MSXMLなどのXMLパーサにそのまま入れてしまってもいいのでは思います。
個人的にはUIなどを含むであればMFCの方がいいと思います。IMultiLanguageやMSXMLなどのCOMもC++の方が使いやすいですし。
polyさん こんばんは。
IMultiLanguageですか 頭にIがつくだけで小難しそうですね(笑
MFCにはチャレンジしてみたいのですが、まだ私のレベルがそこまで達してないようです。
当分は Win32APIで基礎を勉強しておきます。
それとは別に polyさんに教えて頂きたい事があるのですが、また今度の機会にでも...。
コメントを投稿