私は大きなレガシーC++アプリケーション(Visual Studio 2010)を持っていますが、特定のdllがロードされる前にいくつかのコードを実行する必要があります。問題は、コードを実行する前にdllがロードされていることです。ロードするトリガーが何であるか把握しようとしています。C++プログラム(MFC)でdllがロードされている場所を確認してください
リンクオプションでDLLの/ DELAYLOADを指定しました。これにより、DLLのロードが必要になる前に停止する必要があります。しかし、コードを実行する前にまだロードされています。アプリケーションはMFCなので、私のエントリポイントはCWinApp :: InitApplication()のオーバーライドです。
dllの型を参照しているアプリケーションのグローバル変数である必要がありますが、変数の検索方法がわかりません(コードベースが大きく、グローバルに一貫して名前が付けられていません)。
どのようにDLLの負荷を引き起こしているか、またはグローバル変数を見つける方法を見つけるためのアイデアはありますか?
'LoadLibrary'呼び出しを探したり、暗黙的に' #pragma comment(lib ...) '行を読み込んだ場合は、 – PaulMcKenzie
@PaulMcKenzie:OPは、ユーザーコードが実行される前にロードされているDLLを探しています。 'CWinApp :: InitApplication'はCの' main'の道徳的同等物です。 OPは、明示的な 'LoadLibrary'呼び出しを探しているわけではなく、リンカーディレクティブ(彼らが既に知っている、ライブラリがリンクされていること)を探しているわけでもありません。彼らはなぜ、遅延ロードライブラリがロードするのか、その理由を探していますが、まだエクスポートは触れられていないようです。 – IInspectable
delay-load *ヘルパ関数*をオーバーライドして、ロードするDLLをトリガするシンボルを確認できます。 https://msdn.microsoft.com/en-us/library/09t6x5ds(v=vs.100).aspxを参照してください。 – dxiv