ATL 변환 매크로 A2T를 사용하여 std :: string과 const TCHAR * 사이를 변환합니다. 그런 다음 TCHAR *에 파일 구문 분석을위한 추가 기능을 제공합니다. 다음과 같은 처리를 할 때, 그것을 작동 :ATL 변환 매크로 자체의 기능을 좋아하지 않습니다.
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 (파일 이름)을 말한다을 내가 제공 한 파일을 열 수 없습니다. 파일 이름 변수의 형식이 잘못 지정 되었기 때문에이 가정 만 할 수 있습니다. 이 코드에 문제가 있습니까?
감사합니다,
에릭
편집 : 그것은 입력 문자열과 같은 는 "C : \ ABC \ 구축 \ DVV \ ggg.trc"이고 수신 문자열 foo는이 "는 C : \ ABC \ buivv \ ggg "
이 내용은 [ATL 및 MFC 문자열 변환 매크로] (http://msdn.microsoft.com/en-us/library/87zae4a3(v= VS.80) .aspx)에서 설명합니다. 특히 ATL 3.0 매크로 동작 표에서 "함수가 종료되면 문자열이 해제됩니다."라는 메시지가 표시됩니다. –