我的应用程序中有以下代码行:
CString strAppName = AfxGetAppName();
有时会用垃圾字符填充strAppName
,我无法弄明白为什么。
有人有什么想法吗?
TIA。
答案 0 :(得分:6)
如果您手动更改m_pszAppName
,则可以这样做。
在应用程序初始化的最开始,
AfxWinInit
调用CWinApp::SetCurrentHandles
,它会缓存m_pszAppName
指针的当前值,如下所示:
pModuleState->m_lpszCurrentAppName = m_pszAppName;
也就是说,模块状态结构包含
m_pszAppName
指针的副本。如果您按照MSDN中的建议更改了m_pszAppName
中的InitInstance
,那么您仍然可以使用pModuleState->m_lpszCurrentAppName
中的旧指针值。AfxGetAppName()
函数返回AfxGetModuleState()->m_lpszCurrentAppName
。
您可以在m_lpszCurrentAppName和m_pszAppName
上添加data breakpoint。它在<...>\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\appinit.cpp
文件中初始化。您将看到该变量发生了什么以及谁正在尝试更改它。