- - PR -
VC++のtry-catchについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-07-06 19:13
初めて書込みさせていただきます。
VC++でdllを作成しました。 例外処理用のtry-catchを組み込んだのですが Debug版だとcatchできるのですが Relase版だとcatchできません。 なにかコンパイル環境で必要な設定など ご存知な方いらっしゃいましたら 教えてください。 よろしくお願いします。 |
|
投稿日時: 2007-07-10 10:14
dllというのは.NETのdllですか?
catchできるできないはどのようにして判断していますか。 つまり、どのような現象を見て「catchでき(ない)」と判断しているかということです。 |
|
投稿日時: 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; } |
|
投稿日時: 2007-07-10 18:54
こんにちは。
ソースと状況から推測するに、関数ポインタのNewCommandがNULLになり NULLポインタを参照しようとしたことによる アクセス違反(0xC0000005: Access Violation)が出ているのでしょう。 ただ、アクセス違反をtry-catchしますかねぇ・・・ LoadLibraryEx関数やGetProcAddress関数の戻り値を確認しようというつもりはないのでしょうか? |
1