0

std::string と const TCHAR* の間で変換するために、ATL 変換マクロ A2T を使用しています。次に、ファイルを解析するための追加関数に 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) は、私が与えたファイルを開くことができないと言います。これは、ファイル名変数の形式が正しくないためだと思います。このコードに何か問題がありますか?

ありがとう、

エリック

編集: 入力文字列は「C:\abc\build\Dvv\ggg.trc」で、foo が受け取る文字列は「C:\abc\buivv\ggg」のようです。

4

1 に答える 1

0

A2Tマクロは、スタック メモリ空間を使用して文字列を変換します。ポインターtsは、関数から戻るまで有効であり、ポインターが指すデータが破損します。

戻り値の型を に変更すればATL::CString、そこからは問題ありません。

于 2013-06-13T18:00:26.327 に答える