2016-04-28 21 views
1

v110コンパイラでビルドされた実行可能ファイルでv90コンパイラでビルドされたCOM dllを使用するのは安全ですか?実行時にv110実行可能ファイルのv90 COM DLLを使用するのは安全ですか?

v90 dllは、実行時にCOMインターフェイス(これは#importではありません)によって実行時に使用されます。

実行可能ファイルは、DLLのtlbに対して構築されます。 両方とも静的にMFCにリンクしており、どちらもランタイムライブラリのバージョン/MTを使用しています。

私の理解は可能ですが、安全ではありません。使用に関するキャビットがあるため(つまり、メモリ割り当てが異なるため、オブジェクトがdllに割り当てられず、実行ファイルで削除されるため、予期しない動作が発生する可能性があります)。

誰かが私のために明確にすることはできますか?

答えて

8

はい安全です。 COM規則に従うことを条件とします。

COMルールは、ABI などのメモリ管理に関する規則を含む1つのルール、スレッド、

が今まで、これらのルールを破壊しようとしないでくださいです。

dllとexeで同じコンパイラを使用しても、例えば。一方の側にnew、他方にはdeleteを割り当てないでください。同じコンパイラを使用しても同じです。

COMは特定の言語やプラットフォームを制限したり強制したりすることはありません.COMの相互運用性を提供するテクノロジ、言語、プラットフォームが多数あります。 .Netで実装されたCOMオブジェクトは、両方の側がルールに従う限り、オブジェクトをインポートするC++ exeで動作します。


アプリケーションバイナリインタフェース

+0

あなたの答えをいただき、ありがとうございます。非常に役に立ちます。したがって、本質的にCOMインターフェイスは、異なる言語とコンパイラがABIルールを壊さない限り、一緒に楽しく働くことを可能にします。あなたはすべてのABI規則へのリンクを持っていますか? – TinyRacoon

+0

(ABI = Application binary interface) – TinyRacoon

+0

はい、これも追加します。 – Niall