2011-07-08 24 views
2

私は、DLLをロードする前SetErrorModeは効果がありませんか?

"SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);" 

呼び出します。それにもかかわらず、Windowsのメッセージは、「blabla.dllが見つからなかったため、このアプリケーションは を開始できませんでした...」

をポップアップ表示されます。

どうしてですか?私はそれがSetErrorModeが避けなければならないものだと思いましたか? ありがとう!

答えて

3

SetErrorModeの呼び出しは実行されない可能性があります。静的にDLLにリンクすると、実行可能ファイルとともにロードされます。表示されるメッセージは、コードではなく、オペレーティングシステムによってポップされます。 DLLの負荷を制御する場合は、LoadLibraryを使用してロードする必要がありますが、エクスポートされた関数を使用するのは少し難しくなります。

独自のローダー(異なる実行可能ファイル)を作成すると、すべてのDLLが使用可能になっていることが確認され、メインの実行可能ファイルが実行されます。しかし、それは残忍かもしれません...

+0

私はここに少し誤解があると思います。申し訳ありませんが明確にされていません。実際にはDLLはLoadLibrary経由でロードされます。 SetErrorModeは100%確実に実行されます。しかし、別のDLLの読み込み(DLLの読み込み時に使用される)が失敗します... – Boris

+0

エラーモードの設定が以前に実行されたコードによって何らかの形で無効になっている可能性はありますか?例えば。エラーモードはアプリケーションの別の部分によって以前に設定されていましたが、別のものに設定することはできません。 – Boris

+0

@ハンス、これはおそらく起こっていることです。通常、SetErrorModeは正常にLoadLibraryエラー通知を抑制します。失敗の直後に 'GetErrorMode'を呼び出して、現在の値が何であるかを調べてください。それが変更された場合は、あなたの問題があります。 DLLを開発する場合は、以前にSetErrorModeを呼び出した可能性を常に考慮し、必要に応じて既存の値をマスクすることを検討してください。もしそうなら、必要なオブジェクトの存在を手動でチェックする必要がありますLoadLibraryの前にDLL。 – eran

関連する問題