0

プラグインを作成しました。これは、サードパーティのライブラリ (wxWidgets) を使用し、それに動的にリンクする DLL (Run-Time Dynamic Linking) です。ホスト ソフトウェアはプラグインをスキャンしているようですが、エクスポートされた関数は呼び出されません。DependencyWalker を使用してすべての依存関係を確認しました。

プラグインがロードされていることがデバッガーに表示されますが、DllMain は呼び出されず、プラグインはアンロードされます。

エクスポートされた関数を認識して呼び出す LoadLibrary と GetProcAddress を使用して、簡単なテスト アプリケーションからプラグインをロードしようとしました。

ただし、wxWidgets を静的にリンクするとうまくいきました。

エクスポートされた関数、それぞれ DllMain が呼び出されない理由、または DLL の読み込みプロセス全体を監視できるツールを指摘できる人はいますか?

4

2 に答える 2

0

プラグインがロードされる前に wxWidgets がすでにプロセス アドレス空間にロードされている場合 (ホスト アプリがそれを行うことができます。または、wxWidgets にリンクしている別のプラグインがあなたのプラグインの前にロードされている可能性があります)、別のバージョンである可能性があります。 、プラグインに必要なエントリ ポイントの一部が欠落しています。DependencyWalker または WinDbg でホスト アプリを実行すると、どの wxWidgets DLL がロードされているかが表示されます。まったく同じ wxWidgets DLL を使用して、テスト アプリからプラグインをロードすることができます。これにより、欠落している依存関係があるかどうかが明らかになるはずです。

于 2009-04-24T15:16:41.683 に答える
0

おそらく、ホスト ソフトウェアは、プラグインをロードするときに奇妙なことを行い、wxWindows を好まないでしょう。

とにかく、SysInternalsスイートの ProcessExplorer を使用して、プロセスが何をしているかを確認してみてください。

于 2009-04-24T15:16:59.280 に答える