2011-11-10 22 views
1

DirectShowアプリケーションでは、そのリンクのソースがないサードパーティDLL(32ビットDirectShowフィルタ)がありますインテルスレッディングビルディングブロック(tbb.dll)の32ビットWindows版。同じプロセスで異なるバージョンのVisual Studioに対してコンパイルされたDLLがスレッディングビルディングブロックを使用する方法

同じプロセス(別の32ビットDirectShowフィルタなど)で独自のDLLでスレッディングビルディングブロックを使用する場合、このサードパーティ製DLLの作成者と同じバージョンのVisual Studioを使用する必要がありますか?

EDIT - このシナリオでは、バージョンに依存しない_mtライブラリがおそらく最適です。サードパーティのベンダーがこの_mt dllをビルドしていないとどうなりますか?

私自身のスレッディングビルディングブロックのインストールでは、Visual Studio 2005、2008、2010と 'MT'の異なるバージョンのtbb.dllのバージョンが異なっていることに気づきました。 1つの明白な理由の1つは、異なるバージョンのtbb.dllが異なるバージョンのVisual StudioランタイムライブラリDLLとリンクすることです。検査で必要なtbb.dllのバージョンを知ることは可能でしょうか、または使用されているコンパイラのバージョンを示すバイナリ内の文字列を探す必要があります(サードパーティのDLLがVisual Studioランタイムを静的にリンクしているようです)。

tbb.dllにはマニフェストとサイドバイサイドバージョニングが使われておらず、さまざまなコンパイラバージョンに同じ名前が付けられています。最後の手段は、異なるtbb.dllの名前を変更し、名前を変更したdllを参照するためにインポートライブラリまたはインポートをハックすることですが、実際にはこれを避けます。リンカオプションを使用してインポートをリダイレクトする明確な方法はありますか?

これらのDLLはDirectShowフィルタとして機能しているため、Visual StudioランタイムオブジェクトまたはTBBオブジェクトを渡すことはありません。これは明らかに危険です。それらの相互作用は、標準のCOM DirectShow呼び出しを介して相互に呼び出すことに限定されます。

答えて

0

TBBを使用していない場合は、Visual Studioのバージョンに関する質問だけですので、心配する必要はありません。Visual C++ランタイムDLLの名前はバージョンによって異なります。 MSVCR70.DLLMSVCR90.DLLなどです。すでに発見したように、/ MTスイッチは静的バージョンのランタイムをコンパイル/リンクし、DLLに正しいDLLを共有することを心配することなくDLLに埋め込みます。

関連する問題