3

MFC と VS2010 で構築された他の dll を使用する VS2010 で構築された dll (DLL A) があります。VS2008 でビルドされ、VS2008 で再度ビルドされたアプリケーションで実行される別の dll (DLL B) があります。DLL A は DLLB をインポートし (#import ディレクティブを使用)、com オブジェクトを作成します。オブジェクト自体の作成は成功しますが、アプリケーションはどこかでクラッシュします。コントロールを表示するときにクラッシュすると思います(これらは単なる仮定です)。問題は、アプリケーションのソースを持っていないことです。DLL A は、そのアプリケーションへの単なるプラグインです。問題は、そのようなミックスを行う際に考慮すべきことはありますか? それはまったく可能ですか?

4

1 に答える 1

1

はい、 C リンケージを使用している場合、DLL の境界を越えてコードを呼び出しても問題ありません。DLL 境界が char* や int などのプリミティブ C 型を使用している場合。DLL の境界を越えて C++ 参照/ポインターを渡す場合は、同じコンパイラ フラグと同じコンパイラを使用して両側をビルドする必要があります。たとえば、VS2010 コンパイラが VS2008 コンパイラとまったく同じ方法でクラス オブジェクトのメモリをレイアウトするという保証はありません。同じバイト アラインメント フラグを使用すると、レイアウトが同じになる可能性が高くなりますが、保証はできません。 .

于 2012-11-20T14:46:36.213 に答える