1

Visual C++ 2008 Express Edition を使用。.libアプリケーションを、ターゲット システムに存在する場合と存在しない場合がある DLLのインポート ライブラリ ( ) にリンクしています。質問する前に: アプリケーションと一緒に DLL を配布できません。

DLL が存在しない場合、DLL から関数を呼び出すとすぐに (ただしすぐには!)、次のようなメッセージが表示されます。

SomeLibrary.dll が見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。

代わりに、アプリケーションが DLL が存在しないことを検出し、DLL に依存する機能を単に無効にすることを望んでいます。を呼び出してLoadLibrary、成功したかどうかを確認できましたが、これで十分かどうかはわかりません。たぶん、インポート ライブラリは舞台裏でより多くの作業を行っているのでしょうか?

簡単なLoadLibrary電話で十分ですか?そうでない場合、他に何をする必要がありますか? これもできますか?

更新: もちろんLoadLibrary、を使用して、GetProcAddress使用したい機能ごとに使用できます。しかし、それは面倒です。私はそれを避けて、代わりに提供されたインポート ライブラリを使用することを望んでいました。

4

3 に答える 3

1

いいえ、LoadLibrary()まさにあなたが望むものです。これを使用した場合の唯一の結果は、DLLを正常にロードしたときに関数ポインタをDLLに設定する手間ですが、そのプロセスはネット上の他の場所で十分にカバーされています。

于 2009-11-17T09:02:50.067 に答える
1

ここ(MSDN)をチェックするとLoadLibrary、ロードに失敗すると、関数がNULL値を返すことがわかります。また、関数を使用して特定のエラー(ファイルが見つからないはずです)をチェックすることもできますGetLastError

于 2009-11-17T09:03:02.417 に答える
1

これがDelayLoadリンカーオプションの目的ですが、Expressエディションがそれをサポートしているかどうかはわかりません。

于 2009-11-17T09:44:00.333 に答える