3

EXE プログラムが単一の関数呼び出しのために DLL をインポートするという状況があります。カスタム構造を渡し、別のカスタム構造を返すことで機能します。これまで、構造体データ メンバーの 1 つをベクター < MyStruct > にするまでは問題なく動作していました。

プログラムで sizeof(vector< MyStruct >) を実行するとサイズが 20 になりますが、DLL 内から実行するとサイズが 24 になります。このサイズの不一致により、ESP ポインター エラーが発生します。

Vector < MyStruct > がプログラムと DLL で異なるサイズになる理由を誰か教えてもらえますか?

DLL とプログラムの両方の構造体が同一であることを再確認しました。

この件について何か助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

1

クラスに vector<..> メンバーがあり、インライン コンストラクト関数 (ヘッダー ファイルに実装) がある場合、同様の問題が発生します。DLL がリリース バージョンでも DLL バージョンでも、EXE がリリース バージョンであるかのように、EXE で計算されたそのクラスのサイズは DLL よりも 3 バイト小さいため、スタックが破棄されます。

この問題は、次の変更のいずれかによって修正できます。

  • VC98(SP6)でのみ発生します。VS2008 に変更すると、問題がなくなります。

  • インライン コンストラクト関数を CPP ファイルに移動すると、問題も解消され
    ます。

誰かがより詳細な説明をするのを手伝ってくれることを願っています。

于 2011-09-02T07:28:38.370 に答える