- PR -

VC++のtry-catchについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/07/06
投稿数: 2
投稿日時: 2007-07-06 19:13
初めて書込みさせていただきます。
VC++でdllを作成しました。
例外処理用のtry-catchを組み込んだのですが
Debug版だとcatchできるのですが
Relase版だとcatchできません。
なにかコンパイル環境で必要な設定など
ご存知な方いらっしゃいましたら
教えてください。
よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-07-10 10:14
dllというのは.NETのdllですか?

catchできるできないはどのようにして判断していますか。
つまり、どのような現象を見て「catchでき(ない)」と判断しているかということです。
未記入
会議室デビュー日: 2007/07/06
投稿数: 2
投稿日時: 2007-07-10 18:19
返信ありがとうございます。

>dllというのは.NETのdllですか?
dllはVisualStaio6.0(VC++)で作成したものです。

>catchできるできないはどのようにして判断していますか。
>つまり、どのような現象を見て「catchでき(ない)」と判断しているかということです。

以下がソースを抜粋したものです。
MapCOM32.DLLがない状態で、catchしようとしました。
Debug版だとLoadLibraryExで参照できずに
catchに入るようになりました。

try{
//load "MapCOM32.DLL"
filepath = OfwPath + "\\program\\MapCOM32.dll";
m_hInstance = LoadLibraryEx(filepath,NULL,0);

void* (*NewCommand)(char* fileName);

//get pointer of new function
NewCommand = (void* (*)(char*))GetProcAddress(m_hInstance,"newCmd");
m_pEqCom = (EquipmentCOM *)NewCommand(fileName

}

catch ( ... ){
LogExceptionAny( __FILE__, __LINE__ );

return E_PLC_UNEXPECTED;
}
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-07-10 18:54
こんにちは。

ソースと状況から推測するに、関数ポインタのNewCommandがNULLになり
NULLポインタを参照しようとしたことによる アクセス違反(0xC0000005: Access Violation)が出ているのでしょう。

ただ、アクセス違反をtry-catchしますかねぇ・・・

LoadLibraryEx関数やGetProcAddress関数の戻り値を確認しようというつもりはないのでしょうか?

1

スキルアップ/キャリアアップ(JOB@IT)