2009-08-12 114 views
1

我有下面的代碼行中我的應用程序:AfxGetAppName()返回垃圾字符

CString strAppName = AfxGetAppName();

有時它填補strAppName了亂碼,我想不通爲什麼。

任何人有任何想法?

TIA。

+0

你確定'strAppName'填充了垃圾字符嗎?該字符串後面的一些不正確的代碼可能導致破壞'strAppName'。 – 2009-08-12 19:14:22

+0

我很積極。我在調試模式下運行應用程序,並且AfxGetAppName()返回垃圾。或者,也許它不會返回任何東西,並且已經有垃圾了。 – Justin 2009-08-12 19:18:02

+0

要了解如何初始化m_lpszCurrentAppName,可以嘗試添加數據斷點,如我在答案中所述。 – 2009-08-12 19:26:16

回答

6

如果您手動更改​​,則可以這樣做。

在應用程序初始化之初,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文件中初始化。您將看到該變量發生了什麼,以及誰在嘗試更改它。

+0

我的應用程序不會更改'm_pszAppName'。它改變了一些註冊表鍵,這可能是問題嗎? – Justin 2009-08-12 19:06:05

+1

我不認爲更改註冊表項可能會隱式更改'm_pszAppName'。 – 2009-08-12 19:11:28