-2

わかりました、質問を書き直します。1.それで十分ですか

class __declspec(dllexport) CXyz {
public:
int Food() {printf("Food\n");}
};

クラスをexeで次のように使用できるようにします。

#include "CXyz.h"
CXyz obj;
obj.Food();

2. CXyz x (メンバーとメソッドのコードの割り当て) を実行するとどうなりますか。つまり、サイズが (おおよそのメンバー サイズ + メソッドの関数ポインター) の線形構造体が割り当てられ、メソッド コードはセクション .code にあります。プログラムの?CXyz *pX を実行するとどうなりますか?

4

1 に答える 1

2
  1. 十分ではない。クライアント側では、CXyz を __declspec(dllimport) として宣言する必要があります。これは通常、一部のマクロが Dll で __declspec(dllexport) に展開され、クライアント プロジェクトで __declspec(dllimport) に展開される場合に、条件付きコンパイルによって行われます。VS アプリケーション ウィザードを使用してサンプル Dll を作成し、ウィザードの手順の 1 つで [シンボルのエクスポート] をオンにして、その方法を確認します。もちろん、クライアント プロジェクトはサーバーの .lib ファイルとリンクする必要があり、サーバー Dll は実行時に使用できる必要があります。

  2. クラス メンバー (および場合によっては vtable) のみが割り当てられます。アセンブリ レベルのクラス メソッドは、"this" パラメータが隠されているグローバル関数です。

于 2012-09-17T09:50:21.607 に答える