AfxGetAppName()返回垃圾字符

时间:2009-08-12 18:48:52

标签: c++ mfc

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

CString strAppName = AfxGetAppName();

有时会用垃圾字符填充strAppName,我无法弄明白为什么。

有人有什么想法吗?

TIA。

1 个答案:

答案 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文件中初始化。您将看到该变量发生了什么以及谁正在尝试更改它。