2

Visual Studio 2008 を使用すると、出力ウィンドウに次のエラーが表示され続けます。

_CrtDbgReport: 文字列が長すぎるか、IO エラーです

TRACEファイル パス、行番号、エラーなど、エラー状態に関する情報をダンプするために使用するコード全体に多くのマクロが散らばっています。このエラーの原因を追跡する必要があります。出力ウィンドウが長すぎます。TRACEマクロが受け入れることができる文字列の最大長は? 以下は、私がこのマクロを通常どのように使用するかの例です。

TRACE(_T("CreateNotifyWindow : Failed to create handle for notify window thread.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), _T(__FILE__), __LINE__);

任意の考えをいただければ幸いです。ありがとう。

4

2 に答える 2

4

最終的には、問題は string.c_str() の代わりにオブジェクト文字列をマクロに渡すことだと思います。TRACE は可変引数を使用して、最終的に vsnprintf() ファミリー内の何かを呼び出して%s処理します。オブジェクトを処理できないため、オブジェクトを処理Cできません。

実装により、OutputDebugString の最大長は4K バイトから小数部を引いたものです。

于 2011-04-11T20:52:08.027 に答える
2

あなたは私と同じ問題を抱えています。この質問に対する答えをWebで入手し、チェックアウトしました。これは非常にうまく機能しました。

// Inside your main header like stdafx.h, add the following include directive

#include <locale.h>


// And inside your main implementation such as InitInstance()
// of your CWinApp derived application class,
// you can put the following locale designation function.

#ifdef _DEBUG
_tsetlocale(LC_ALL, _T("korean")); // you should set the country code of yours
#endif // _DEBUG

これで、デバッグ出力ウィンドウに正しいワイド文字列が表示されます。幸運を!

于 2011-08-28T11:23:54.313 に答える