2008-02-12

MFCが便利そうなんだけど...

とある WebサービスからXMLデータを取得するプログラムを作りかけています。
 
ソケットとか面倒そうだなぁと思って調べていると 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 件のコメント:

poly さんのコメント...

もう不要かもしれませんが・・・文字コードの変換はIMultiLanguageを利用するといいと教わった事があります。残念ながら私は使ったことはないのですが。
ただXMLのデータならUTF8のものが多いですから、MSXMLなどのXMLパーサにそのまま入れてしまってもいいのでは思います。
個人的にはUIなどを含むであればMFCの方がいいと思います。IMultiLanguageやMSXMLなどのCOMもC++の方が使いやすいですし。

kazuaki さんのコメント...

polyさん こんばんは。

IMultiLanguageですか 頭にIがつくだけで小難しそうですね(笑

MFCにはチャレンジしてみたいのですが、まだ私のレベルがそこまで達してないようです。
当分は Win32APIで基礎を勉強しておきます。

それとは別に polyさんに教えて頂きたい事があるのですが、また今度の機会にでも...。