Ошибка при использовании TRACE для вывода имени файла - PullRequest
0 голосов
/ 19 ноября 2010

Я пытаюсь использовать макрос TRACE для отправки имени файла в окно вывода.Следующие компиляции, но при выполнении, вместо желаемого вывода, я получаю сообщение об ошибке в окне вывода:

TRACE(_T("Trace test.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ERROR_SUCCESS, __FILE__, __LINE__);

Выдает ошибку:

_CrtDbgReport: String too longили IO ErrorFirst-шанс исключения в 0x7c812afb в MyApp.exe: Microsoft C ++ исключение: долго в памяти 0x0012fe18 ..

Я уверен, что это связано с макросом __FILE__, ноЯ не уверен, что именно не так.Кто-нибудь знает, как это работает?Спасибо.

1 Ответ

1 голос
/ 19 ноября 2010

Разве вам не нужна широкая строковая версия FILE , чтобы получить это право?

#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
wchar_t *pwsz = __WFILE__;

wprintf(pwsz)

// Function to split path into file and directory parts..
void ExtractFileNameFromPath( const std::wstring &_sPath,std::wstring &_sFilename,std::wstring &_sDirectory)
{
    int iPos = _sPath.rfind('\\');
    if( iPos == std::_tstring::npos) iPos = _sPath.rfind(TCHAR("/"));
    if( iPos != std::_tstring::npos) 
    { _sFilename = _sPath.substr(iPos + 1); _sDirectory = _sPath.substr(0,iPos); }
    else _sFilename = _sPath;
    nsStringTools::Trim(_sFilename);
    nsStringTools::Trim(_sDirectory);
    if(_sDirectory[_sDirectory.length()-1] != _T('\\'))
        _sDirectory += _T("\\");
}
...