AfxGetAppName()返回垃圾字符

Jus*_*tin 2 c++ mfc

我的应用程序中有以下代码行:

CString strAppName = AfxGetAppName();
Run Code Online (Sandbox Code Playgroud)

有时它会填满strAppName垃圾字符,我无法弄清楚原因.

有人有主意吗?

TIA.

Kir*_*sky 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.它在<...>\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\appinit.cpp文件中初始化.您将看到该变量发生了什么以及谁正在尝试更改它.