我有下面的代碼行中我的應用程序:AfxGetAppName()返回垃圾字符
CString strAppName = AfxGetAppName();
有時它填補strAppName
了亂碼,我想不通爲什麼。
任何人有任何想法?
TIA。
我有下面的代碼行中我的應用程序:AfxGetAppName()返回垃圾字符
CString strAppName = AfxGetAppName();
有時它填補strAppName
了亂碼,我想不通爲什麼。
任何人有任何想法?
TIA。
如果您手動更改,則可以這樣做。
在應用程序初始化之初,
AfxWinInit
調用CWinApp::SetCurrentHandles
,如下其緩存指針的當前值:
pModuleState->m_lpszCurrentAppName = m_pszAppName;
也就是說,模塊狀態結構保持副本指針。如果您在
InitInstance
中更改(如MSDN中的建議),則您仍舊有pModuleState->m_lpszCurrentAppName
中的舊指針值。AfxGetAppName()
函數返回AfxGetModuleState()->m_lpszCurrentAppName
。
您可以在m_lpszCurrentAppName和上添加data breakpoint。它在<...>\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\appinit.cpp
文件中初始化。您將看到該變量發生了什麼,以及誰在嘗試更改它。
我的應用程序不會更改'm_pszAppName'。它改變了一些註冊表鍵,這可能是問題嗎? – Justin 2009-08-12 19:06:05
我不認爲更改註冊表項可能會隱式更改'm_pszAppName'。 – 2009-08-12 19:11:28
你確定'strAppName'填充了垃圾字符嗎?該字符串後面的一些不正確的代碼可能導致破壞'strAppName'。 – 2009-08-12 19:14:22
我很積極。我在調試模式下運行應用程序,並且AfxGetAppName()返回垃圾。或者,也許它不會返回任何東西,並且已經有垃圾了。 – Justin 2009-08-12 19:18:02
要了解如何初始化m_lpszCurrentAppName,可以嘗試添加數據斷點,如我在答案中所述。 – 2009-08-12 19:26:16