大規模なアプリケーションのプラグインとして使用されるQt DLLを作成しています。このDLLは、悲しいことに同じフォルダにある他のDLLに依存しているため、現在の作業ディレクトリが正しく設定されている場合にのみロードされます(大きなアプリケーションがDLLのLoadLibrary
を呼び出す前に行います)。私はこの動作を制御できません。COMオブジェクトのDLL読み込みの問題
私はこのプラグインに単純なCOMオブジェクトを追加するように求められましたが、現在の作業ディレクトリが正しく設定されていない限り、DLLをサードパーティアプリケーションで登録または使用できないという問題があります。依存関係がないためにLoadLibrary
プラグインの呼び出しが失敗するためです。明らかに、サードパーティのアプリケーションで使用されている現在の作業ディレクトリを制御することはできません。この段階では依存関係が見つかるようにPATHを変更することはできません。
私は/DELAYLOAD
を従属DLLに使用しようとしましたが、これは 'データシンボルのインポートによりfoo.dllを遅延ロードできません'というエラーで失敗します。ここでも、これらの依存DLLの使用方法を簡単に変更することはできません。
私は唯一の解決策は、COMオブジェクトを何にも依存しないスタンドアロンDLLに移動することですが、ソリューションを見つけてプラグインDLLにCOMオブジェクトを残すというプレッシャーを受けています。私はこれがどのように可能であるかを見ることができないので、誰か他のアイデアがあるかどうか分かりました。サードパーティのアプリケーションがLoadLibrary
を私のプラグインに呼び出すと、システム全体のSetDllDirectory
コールの一部のフォームが役立ちます。
FWIW私は完全に同意します。私は、このアイデアを持つ力に売る必要があります。 – Rob
@Rob:現在のデザインが苦痛を感じているのは力を見ていないのですか? – sharptooth