プロが教える店舗&オフィスのセキュリティ対策術

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と同じフォルダに設置します。

A 回答 (2件)

MFCのソースをちゃんと追いかけましょう



m_pszProfileNameはCWinAppのコンストラクタでNULLとして初期化されます
m_pszProfileNameに何かが代入されるのはCWinAppのSetRegistryKey
またはSetCurrentHandlesのどちらかが実行された場合でしょう

そのInitTestを実行するまでにこれを呼び出したインスタンスが上記の2関数を呼び出していなければ NULLなので『初期化されていないポインタ』などと表示されるでしょう

この回答への補足

ご回答ありがとうございます。
CXXXAppのインスタンスを生成したときに
コンストラクタでSetRegistryKey
またはSetCurrentHandlesを呼ぶようにすれば
問題ないでしょうか?

補足日時:2008/11/23 08:58
    • good
    • 0

何をされようとしているのか、伝わってきませんが、


トレースをしっかりしてみては如何でしょう。
何か状況が見えてくると思いますよ。

この回答への補足

ご回答ありがとうございます。

目的は、Windowsサービスから今回のDLLプログラムを
呼ぶのですが、InitInstanceはTRUEを返さないと
エラーになってしまうため、別途関数InitTestを用意して
そこで、m_pszProfileNameの変更処理を行い
成功可否をサービス側のプログラムに返却することです。

補足日時:2008/11/22 06:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!