2009-08-12 49 views
1

を返します。 AfxGetAppNameは()私は自分のアプリケーションに次のコード行を持つ文字化け

CString strAppName = AfxGetAppName();

は、時にはそれが文字化けしてアップ strAppNameいっぱい、と私はその理由を把握することはできません。

誰もが考えている?

TIA。

+0

'strAppName'にガベージ文字が入力されていませんか?その文字列の後の不正確なコードは、 'strAppName'を破壊する可能性があります。 –

+0

私は肯定的です。私は、デバッグモードでアプリケーションを実行している、AfxGetAppName()はゴミを返します。あるいは、何も返さないかもしれないし、既にそこにごみがあります。 – Justin

+0

m_lpszCurrentAppNameがどのように初期化されているかを調べるには、私の答えで説明したようにデータブレークポイントを追加することができます。 –

答えて

6

​​を手動で変更すると可能です。次のように​​ポインタの現在の値をキャッシュCWinApp::SetCurrentHandlesを呼び出すAfxWinInitアプリケーションの初期化の非常に始まり、時


pModuleState->m_lpszCurrentAppName = m_pszAppName;

で、モジュール状態構造体は​​のコピーを保持していますポインタ。​​をInitInstanceに変更した場合、MSDNのアドバイスでは、以前のポインタ値はまだpModuleState->m_lpszCurrentAppNameになります。 AfxGetAppName()関数はAfxGetModuleState()->m_lpszCurrentAppNameを返します。

data breakpointをm_lpszCurrentAppNameに、​​に追加できます。ファイルは<...>\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\appinit.cppに初期化されています。あなたはその変数で何が起こっているのか、誰がそれを変更しようとしているのかを見ていきます。

+0

私のアプリケーションは 'm_pszAppName'を変更しません。それはいくつかのレジストリキーを変更しますが、それは問題になる可能性がありますか? – Justin

+1

私はレジストリキーを変更すると 'm_pszAppName'が暗黙的に変更されるとは思わない。 –

関連する問題