- 締切済み
iniファイルのパス取得m_pszProfileNameについて
InitInstanceで、m_pszProfileNameを変更していますが、 別の関数(InitTest)を用意し、そこでパス変更をしようと思っています。 追加関数のif (m_pszProfileName) {のところで、 不適切なptrとなってしまいます。 ifの中に入っていきません。 現行のソース BOOL CXXXApp::InitInstance() { if (m_pszProfileName) { free(m_pszProfileName); } m_pszProfileName = _tcsdup(iniPath); : : パスの変更に失敗した時 return FALSE; : return TRUE; } 追加関数 BOOL CXXXApp::InitTest() { if (m_pszProfileName) { ←ここがTRUEにならず、不適切なptr free(m_pszProfileName); } m_pszProfileName = _tcsdup(iniPath); : : パスの変更に失敗した時 return FALSE; : return TRUE; } 変更後は、オーバーライドしたInitInstanceでは、 何も処理を行わず、そのままTRUEをreturnさせます。 追加関数で、m_pszProfileNameが初期化できていないのでしょうか? どうすれば、追加関数で、iniファイルのパス変更ができるか教えてください。 iniファイルは、exeと同じフォルダに設置します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
MFCのソースをちゃんと追いかけましょう m_pszProfileNameはCWinAppのコンストラクタでNULLとして初期化されます m_pszProfileNameに何かが代入されるのはCWinAppのSetRegistryKey またはSetCurrentHandlesのどちらかが実行された場合でしょう そのInitTestを実行するまでにこれを呼び出したインスタンスが上記の2関数を呼び出していなければ NULLなので『初期化されていないポインタ』などと表示されるでしょう
- Yanch
- ベストアンサー率50% (114/225)
何をされようとしているのか、伝わってきませんが、 トレースをしっかりしてみては如何でしょう。 何か状況が見えてくると思いますよ。
補足
ご回答ありがとうございます。 目的は、Windowsサービスから今回のDLLプログラムを 呼ぶのですが、InitInstanceはTRUEを返さないと エラーになってしまうため、別途関数InitTestを用意して そこで、m_pszProfileNameの変更処理を行い 成功可否をサービス側のプログラムに返却することです。
補足
ご回答ありがとうございます。 CXXXAppのインスタンスを生成したときに コンストラクタでSetRegistryKey またはSetCurrentHandlesを呼ぶようにすれば 問題ないでしょうか?