2011-06-30 15 views
1

私の仕事ではVS2008です。 私が管理し、私は仕事のプロジェクトのいくつかのパートナー、VS2010を使用する(VS2008を使用することはできません)VS2008でVS2010ビルドされたDLLを使用する方法

彼らはベースのDLLを構築するために持っていると私は私の枠組みの中でそのDLLを使用する必要があります...

メインアプリケーションを構築し、DLLをリンクする。 VS2010のDLL年代から アプリが起動し、そしてオブジェクトが作成され、 が、私は、これらのオブジェクトを削除しようとするアプリのクラッシュは...

Windowsはapp.exeの中にブレークポイントをトリガしました。これは、 のヒープが破損している可能性があります。これは、app.exeまたはロードした DLLのバグを示しています。

これを修正する方法はありますか?

答えて

4

あなたの同僚のDLLは、VS2010のランタイムライブラリにリンクされています。あなたのコードはVS2008のランタイムライブラリにリンクされています。

VS2010 DLLから関数を呼び出して新しいオブジェクトを割り当てると、そのライブラリのヒープに割り当てられます。そのオブジェクトで "delete"を呼び出すと、VS2008のランタイムライブラリは自身のヒープから解放しようとします。彼らは異なるので、あなたはそのエラーを取得します。

あなたがそのようなランタイムを混在させるつもりなら、あなたはタイプごとにfree()スタイル機能(ないだけC++デストラクタ)を露出するためにVS2010のDLLを必要とします。 STLコンテナの使用や「コピーオンライト」オブジェクトのようなランタイムライブラリを混在させるときには、他に注意すべき点があります。一般的に、回避する方が簡単です。

+0

はい、私はそれを避けるべきであることを知っていますが、残念ながらそれは不可能です...あなたがVS2010 dllを言うとき、vc2010再配布可能なパッケージか何か?答えをありがとう! – geo

+0

再配布可能なランタイムパッケージ、またはランタイムを静的にリンクしている場合はdll自体。最終結果は同じです:2つの異なるヒープ。 – vanza

0

dllまたはexeで割り当てられたオブジェクトは、同じ場所で割り当て解除する必要があります。あなたはあなたのパートナーと話す必要があります。目標はオペレータの割り当てと割り当てのオーバーロードに使用されるかもしれませんhttp://www.cprogramming.com/tutorial/operator_new.html

関連する問題