1

dll-1のheaderfilexhで定義されたクラスがあります。


class A{
   public:
   static int val;
__declspec(dllexport) static void setval(int v) {val = v;} 
};

そしてx.cppは


int A::val = 256;

今私はdll-1をビルドし、それは通過しましたが、このdllをリンクする他のdllは、エラー未解決の外部シンボルpublic:static int A::valでビルドに失敗しました。これは、エクスポートされた関数をx.cppで定義したときに解決されました。でもなぜ壊れたのかわかりません。ありがとう。

4

1 に答える 1

4

関数をインラインで定義したため、コンパイラーは、呼び出し元の場所に関数のコピーを自由に作成できます。エクスポートされていないため、これらのコピーは変数を表示できません。

関数定義を.cppに移動すると、すべての呼び出しがDLLに戻り、DLLの作成時に変数が解決される可能性があります。

于 2012-09-25T23:11:59.750 に答える