0

/MTd ランタイム ライブラリを使用するネイティブ C++ exe があります。この exe のビルドをあまり制御できないため、このオプションを変更することはできません。STL ベクトル メンバー変数を持つクラスを返すこの exe で CLI C++ dll を呼び出す必要があります。CLI C++ メソッドの戻り時に、ヒープ破損エラーが発生します。私の分析によると、これは 2 つの異なる CRT があり、ベクトルの割り当て解除メソッドがネイティブ CRT で実行され、無効なアドレスが原因で爆弾が発生するために発生します。

ネイティブ exe で実行するために別の CRT でコンパイルされた CLI C++ dll からベクトルを返すにはどうすればよいですか?

4

1 に答える 1

1

あなたの評価は正しいです。ある CRT 内で実行された割り当ては、別の CRT 内では割り当てを解除できません。これは単純なルールであり、それを回避する方法はありません。

同じランタイム ライブラリ設定で両方のモジュールをビルドするか、モジュール境界間で POD タイプのみを転送する必要があります。

于 2011-06-08T16:57:43.117 に答える