0

コードの何が問題になっているのかわかりませんが、デバッガーに表示されるコンテンツはありますが、stdoutには何も出力されません。

#include "stdafx.h"
#include <afx.h>
#include <afxinet.h>

#include <iostream>
#include <list>
#include <string>
#include <vector>
#include "wininet.h"

using namespace std;



void DisplayPage(LPCTSTR pszURL)
{
   CInternetSession session(_T("Mozilla/5.0"));
   CStdioFile* pFile = NULL;
   pFile = session.OpenURL(pszURL);
   CString str = _T("");


   while ( pFile->ReadString(str) )
   {
       wcout << str.GetString() << endl;  // <-- here I expect some output, get nothing
                                            //     not even newline !
   }

   delete pFile;
   session.Close();
}


// --- MAIN ---
int _tmain(int argc, _TCHAR* argv[])
{
    DisplayPage( _T("http://www.google.com") );

    cout << "done !" << endl;
    cin.get();

    return 0;
}

コンソールプロジェクトです。コンソールウィンドウがポップアップし、 「完了しました!」というメッセージが表示されます。表示のみ。

4

1 に答える 1

0

興味のある方は、Web ページから受け取った非 OEM 文字がデフォルトのコンソールに書き込もうとしていることが問題の原因でした (OEM 文字を期待し、モードを変換しています)。最初の非 OEM 文字で std::wcout は処理を停止します。標準出力に送信する前に、コンソールをバイナリ モードに設定するか、受信した文字列を適切なエンコーディングに変換してください。

#include <fcntl.h>
#include <io.h>

...
int old_transmode = _setmode(_fileno(stdout), _O_U16TEXT);
std::wcout << str.GetString() << std::endl;    // print wide string characters
...
_set_mode(_fileno(stdout), old_transmode);    // restore original console output mode
于 2012-06-02T12:44:39.947 に答える