3

アプリケーションで wintrust.dll と crypt32.dll の読み込みを遅らせようとしています (これらは DLL でデジタル署名/発行者チェックを実行するために使用されます)。私はVS2008を使用しています。これら 2 つの DLL をプロジェクト プロパティの [Linker] セクションの [Delay Load] プロパティにエントリとして追加した後も、DLL から何も読み込まれなかったという LNK4199 警告と、WinVerifyTrust などのシンボルを解決できない LNK2019 エラーが表示されます。

以下を追加の依存関係のエントリとして追加すると、この問題が軽減されます: crypt32.lib および wintrust.lib。リンクに問題はありません。しかし、私が疑問に思っているのは、これが静的ライブラリにリンクされていないことを確認するにはどうすればよいですか? ライセンスの問題が発生する可能性があるため、静的ライブラリにリンクしたくありません。Windows にインストールされている DLL を動的にロードしたいのですが、LoadLibrary および GetProcAddress 関数呼び出しに頼らずに、DelayLoad がこれを行うのに役立つことを期待していました。

すべての異なるライブラリの使用法/リンク オプションに関する情報をいただければ幸いです。

ありがとう。

4

4 に答える 4

3

ロードを遅らせても、libファイルにリンクする必要がなくなります。通常、DLLはアプリケーションの起動と同時にロードされます。読み込みの遅延は、そのDLLから関数を初めて呼び出すまでこれを遅らせるだけです。いずれにせよ、呼び出している関数が実際にDLLに存在することをリンカが確認できるように、libファイルにリンクする必要があります。

libファイルにリンクしたくない場合は、とを使用するしかありませLoadLibraryGetProcAddress

于 2010-10-14T18:57:00.090 に答える
3

これらの静的 .lib はありません。SDK ライブラリは、対応する Windows API が DLL 内に存在するため、静的 .lib ではなく、常にインポート ライブラリです。これについて心配する必要はありません。

于 2010-10-14T18:58:09.993 に答える
2

期待どおりにリンクされているかどうかを判断するのに役立つツールの 1 つが DependecyWalker です: http://www.dependencywalker.com/ - 具体的には、遅延ロードの場合、特別な記号でマークします。

于 2010-10-14T19:24:49.033 に答える
0

Win32 API メソッドのLoadLibraryGetProcAddressを参照してください。

于 2010-10-14T18:48:58.887 に答える