ATL转换宏不喜欢它自己的功能

时间:2013-06-13 17:46:53

标签: string visual-c++ atl

我使用ATL转换宏A2T在std :: string和const TCHAR *之间进行转换。然后我将TCHAR *提供给另一个函数来解析文件。当我执行以下操作时,它可以工作:

USES_CONVERSION;
const TCHAR* fileName = A2T(file.c_str());
foo(filename);

但是,我尝试使用新函数重构空检查和转换:

const TCHAR* StringToTChar(const string s)
{   
/*  To be added in
      if(s.empty())
      {
          return NULL;
      }
*/
      USES_CONVERSION;
      const TCHAR *ts= A2T(s.c_str());//Using ATL, convert to TCHAR*
//  assert(ts!=NULL); to be added

    return ts;
}

现在函数foo(filename)说它无法打开我给它的文件。我只能假设这是因为filename变量格式不正确。这段代码有什么问题吗?

谢谢,

埃里克

编辑: 看起来输入字符串是“C:\ abc \ build \ Dvv \ ggg.trc”,字符串foo接收的是“C:\ abc \ buivv \ ggg”

1 个答案:

答案 0 :(得分:0)

A2T宏使用堆栈内存空间转换字符串。指针ts一直有效,直到从函数返回并且它指向的数据被破坏为止。

如果您将返回类型更改为ATL::CString,那么您可以在那里完成。