代码之家  ›  专栏  ›  技术社区  ›  Jim Fell

使用跟踪输出文件名时出错

  •  0
  • Jim Fell  · 技术社区  · 14 年前

    我想用 TRACE 宏将文件名发送到输出窗口。以下是编译的,但是当它执行时,我在输出窗口中得到一个错误,而不是所需的输出:

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

    产生错误:

    在MyApp.exe的0x7C812AFB中,字符串太长或IO错误第一机会例外:微软C++异常:长在内存位置0x012FE18…

    我肯定这和 __FILE__ 宏,但我不确定到底出了什么问题。有人知道怎么做吗?谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   ROAR    14 年前

    你不需要一个宽字符串版本的 文件 为了把它弄好?

    #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("\\");
    }