背景: GUI モードとコンソール モードの両方を実行できる C++ MFC アプリケーションを開発しています。ただし、どちらの場合も、ユーザーはコマンドプロンプトを使用してアプリケーションを実行し、引数を指定する必要があります。アプリケーションを初期化すると、コマンド プロンプトで入力引数の使用がチェックされ、コンソール モードまたは GUI モードで実行することが決定されます。このアプリケーションは、複数の言語で動作する必要があります。そのため、文字列テーブルを使用して表示テキストを保存しています。
ここでは、この関数を使用して既存のコマンド プロンプトをアプリケーションに接続し、アプリケーションがコンソール モードで実行されている場合のステータスを表示します。
BOOL CMyclass::EnableConsolePrinting(){
BOOL GotConsoleAttach = FALSE;
if (AttachConsole(ATTACH_PARENT_PROCESS))
{
int osfh = _open_osfhandle((intptr_t) GetStdHandle(STD_OUTPUT_HANDLE), 8);
if ((HANDLE)osfh != INVALID_HANDLE_VALUE)
{
*stdout = *_tfdopen(osfh, _T("a"));
GotConsoleAttach = TRUE;
}
}
return GotConsoleAttach;
}
そして、このようにステータスをコンソールに出力します。
this->EnableConsolePrinting();
cout << CMsg(IDS_STRING_ERROR_MESSAGE);
GUI モードでは、このメソッドを使用してラベルにテキストを表示します。
lblError.SetWindowTextW(CMsg(IDS_STRING_ERROR_MESSAGE));
質問:どちらのメソッドもコンパイルして正常に実行されます。しかし、GUI モードでは正しい文字列が表示され、コンソールはこのような意味の少ないコードを出力します。00C2D210
同じ文字列の場合。何か案が?