2

私はネイティブのC++アプリケーションを持っています(C ++だけの派手な.Netのものはありません)。ただし、混合モードラッパーdllファイルを介していくつかのオプションの.Netアセンブリを使用します。これらのdllは、遅延ロードを使用してロードされます。混合モードラッパーを使用する場合、ロードするには完全に信頼できる必要があります。したがって、アプリケーションがdllを使用しようとすると、dllが存在しない場合、または信頼されていない場合、すべてがクラッシュして厄介なエラーメッセージが表示されます。

しかし、私の場合、私のメインアプリケーションが関係している限り、これらのdllファイルがなくても動作します。したがって、これらのdllをロードできるかどうかを確認する方法が必要です(ファイルはそこにあり、信頼されています)。これを行うために、try catchブロック内のdll関数の1つにダミー呼び出しを入れて、例外をキャッチしようとしましたが、それでも「modulenotfound」例外でクラッシュします。

また、処理されていない例外フィルターをカスタムフィルターに置き換えようとしましたが、それでもうまくいきませんでした。

また、LoadLibraryメソッドを使用して、最初にdllをロードし、戻り値を確認しようとしました。ただし、その関数は、信頼されていない場合でもDllをロードしますが、メソッド呼び出しを実行しようとするとクラッシュします。

これは未解決の問題だとは思いません。実際にロードしようとせずにdllを使用できるかどうかを確認して、クラッシュするのはどれほど難しいでしょうか。何か案は?

4

2 に答える 2

1

すべての方法が失敗した場合は、ライブラリをロードしようとする別のプロセス (つまり、単純なコマンドライン アプリ) を実行してから、そのリターン コードを分析してみてください。

しかし、構造化された例外処理、つまり、try/catch ではなく __try/__catch を試しましたか? ここを参照してください。

于 2009-10-22T19:46:11.410 に答える
0

別のプロセスを使用して最初にdllをテストし、エラーが発生するかどうかを確認するという考えがありました。私のアプリではそれを使用したくありません。実際には一族の解決策ではありませんでした。しかし、__try、__except アプローチは遅延ロード dll 呼び出しで機能しました。LoadLibrary を使用する必要さえありませんでした。ありがとう。

于 2009-10-24T13:49:55.963 に答える