2009-08-12 5 views
1

를 반환 AfxGetAppName는() 나는 내 응용 프로그램에 다음 코드 줄을 가비지 문자

CString strAppName = AfxGetAppName();

때로는 가비지 문자가 최대 strAppName 채우고, 그리고 그 이유를 알아낼 수 없습니다.

누구든지 아이디어가 있습니까?

TIA.

+0

'strAppName'은 가비지 문자로 채워져 있습니까? 문자열 뒤에 잘못된 코드가 있으면 strAppName이 손상 될 수 있습니다. –

+0

나는 긍정적이다. 디버그 모드에서 응용 프로그램을 실행하고 AfxGetAppName() 가비지를 반환합니다. 또는, 아무것도 반환하지 않을 수도 있고, 거기에 이미 쓰레기가 있습니다. – Justin

+0

m_lpszCurrentAppName을 초기화하는 방법을 찾으려면 내 대답에 설명 된대로 데이터 중단 점을 추가하려고 할 수 있습니다. –

답변

6

m_pszAppName을 수동으로 변경하면 가능합니다.
이다 pModuleState->m_lpszCurrentAppName = m_pszAppName;

모듈 상태 구조체가 m_pszAppName의 복사본을 보유하고있다 : 애플리케이션 초기화의 시작시

, AfxWinInit 다음과 같이 m_pszAppName 포인터의 현재의 값을 캐시하는 CWinApp::SetCurrentHandles 호출 바늘. MSDN에서 설명한대로 InitInstancem_pszAppName을 변경하면 이전 포인터 값이 여전히 pModuleState->m_lpszCurrentAppName이됩니다. AfxGetAppName() 함수는 AfxGetModuleState()->m_lpszCurrentAppName을 반환합니다.

당신은 m_lpszCurrentAppName과 m_pszAppNamedata breakpoint을 추가 할 수 있습니다. <...>\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\appinit.cpp 파일에서 초기화됩니다. 당신은 그 변수로 어떤 일이 일어나고 있는지, 누가 그것을 바꾸려고 하는지를 보게 될 것입니다.

+0

내 응용 프로그램은'm_pszAppName'을 변경하지 않습니다. 그래도 문제가 될 수있는 레지스트리 키를 변경합니다. – Justin

+1

레지스트리 키를 변경하면 암시 적으로'm_pszAppName'을 변경할 수 있다고 생각하지 않습니다. –

관련 문제