2012-02-15 3 views
0

私はdllを持っています。implicitly dllにリンクしています。dll A explicitly dll Bにリンクしています。implicitly dll Z '(Z dllの別のバージョン)にリンクしています。どのように暗黙的にdllとその依存関係を競合することなくリンクするのですか?

さらに、いくつかの要素があります。dll Bはシステムのどこにでも置くことができ、その場所は実行時にXMLファイルを介してdll Aに表示され、loadlibraryを使用してロードされます。

私たちが管理できない制限のため、環境のパスを変更することはできません。

私が問題に持っているのは、dlls AとBが正しいバージョンのZ DLLを使用することです。

どのようなオプションがありますか?

+3

あなたはホースしています。同じライブラリの2つの異なるバージョンを "暗黙的に"ロードすることはできません(私はこれを "dlopen'を使わずに"と呼んでいます)。ライブラリがPICでない場合、同じ仮想アドレス空間に2つの異なるシンボルセットが必要であり、これは明らかに不可能である。 – Borealid

+0

本質的に唯一の選択肢は、Out of Process COMサーバーなどの2つのプロセスの1つを個別のプロセスに外部化することです。 –

+0

ありがとうございました。あなたが回答を投稿したら、私はそれを受け入れます。 – dangerousdave

答えて

1

これを修正するには、2つのAまたはBのいずれかのマニフェストを同じバージョンのZとリンクするように変更します。マニフェストは埋め込まれている可能性が高いため、Microsoftのマニフェストツールmt.exeが必要です。 SDKで利用できるはずです。これは、使用しているランタイムとは異なるランタイムにリンクされた3つのパーティツールとリンクすると頻繁に発生します。

関連する問題