2012-01-04 9 views
3

私はいくつかのメモリ割り当てを実行し、ポインタを返すDLLを使用しています。 コードのようなものです:nullポインタを返すDLL内のメモリ割り当て

ObjectClass *obj = FunctionFromDLL(); 

objは有効なポインタですが、obj->SubObjectは私がチェック悪いポインタ(0xcdcdcd) で、FunctionFromDLL()が正しくSubObjectを割り振る機能がに戻っているとき、このポインタは、唯一の悪い値を取得します発信者。

DLLにメモリを「共有」するための特別なものがありますか?

+2

メモリを共有するためにDLLで特別な処理を行う必要はありません。 DLLは同じアドレス空間に存在します。あなたの問題は他のものです。 DLLの境界を越えてC++オブジェクトを渡そうとしていますか?これは、両端で同じコンパイラを使用し、 'dllexport' /' dllimport'を使用しない限り動作しません。私たちが助けることができるようになる前に、もっと教えてください。 –

+0

エクスポートされたDLL関数は__declspec(dllexport)を実行しており、インポートされた.hファイルで__declspec(dllimport)を使用しています。 両方のプロジェクトは、同じVisual Studioを使用してコンパイルされます。 – Guillaume

+0

追加しません。あなたがまだ私たちに語っていないものでなければなりません。初期化されたメモリは、モジュール境界を通過するときに初期化されません。 –

答えて

0

をマークするために、MicrosoftのC++のデバッグランタイムライブラリで使用され、私はプリプロセッサ値として_USE_32BIT_TIME_Tを定義したので、それがありました。

私はそれを削除し、今は正常に動作します。

ありがとうございました。

2

dllとappの間に割り当てられたメモリを共有する特別な方法はありません。それ以上使用しないと、dllのメモリを必ず削除してください。

編集:0xCDCDCDCD:初期化されていないヒープメモリに

+0

このヒープメモリはDLL内で初期化されています(私はデバッガでチェックしました)。そして、外に出ると初期化されなくなります。 – Guillaume

関連する問題