2009-11-20 2 views
0

를 추적 내 OpenFile 함수가 파일 이름 변수가 손상되고 호출 된 후노하우 변수 부패

// Datafile.h 
class CDataFile : public CStdioFile 
{ 
public: 
CDataFile(void); 
~CDataFile(void); 

int OpenFile(LPCWSTR FileName); 
} 

을 다음과 같이 CStdioFile에서 파생 된 MFC 클래스를 선언합니다.

int CDataFile::OpenFile(LPCWSTR FileName) 
    { 

m_OpenFlags = CFile::modeNoTruncate | CFile::modeReadWrite; 

// Before open. FileName = "c:\afile.txt" 

    if (!Open(FileName, m_OpenFlags, NULL)) 

     { 
      return GetLastError(); 
     } 

//After open. FileName = ""ﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮﻮވĚᗸ÷ᘸ÷㼠碞­" 

// other stuff 
} 

} 

하지만 파일을 열기 전에

WCHAR FileName[] = _T("c:\\afile.txt"); 

에 파일 이름을 변경하는 경우 변수 파일 이름은 그대로 남아있다. 이전에 MFC/Winapi를 사용하여이 동작을 보았으며 항상 LPCWSTR 또는 CString 대신 문자 배열을 사용하여 작업했습니다. 왜 이런 일이 생길까요? VS Debugger를 사용하여 이와 같은 문제를 추적하는 가장 좋은 방법은 무엇입니까? 부패는 Filecore.cpp

if (!CFile::Open(lpszFileName, (nOpenFlags & ~typeText), pException)) 
    return FALSE; 
+1

(http://msdn.microsoft.com/en-us/library/hwbccf8z.aspx) LPCTSTR이 아닌 LPCWSTR (일반 문자와 넓은 문자열)이 필요하다고합니다. 어쩌면 그것이 문제일까요? –

+0

나는 그렇게 생각하지 않는다 "typedef LPCWSTR LPCTSTR;" – Canacourse

답변

2

data breakpoint 사용하여 한 번 봐 타고 MFC 파일 여기에 일이 나타납니다 (또한 하드웨어 브레이크 포인트라고도합니다.) 메모리가 수정 될 때 당신은 휴식 할 수 있습니다.