状況:
私は持っている:
class Platform {
public:
Platform() { count++; cout << getCount();}
static int getCount() { return count; }
private:
static int count;
}
これは静的ライブラリとして作成されます。
動的ライブラリ拡張の作成を検討する
class __declspec(dllimport/dllexport) DerivedPlatform : public Platform {
}
はい、私は非 DLL インターフェイス クラスから派生していることを認識しています。
Per:静的フィールドは継承されますか? 、 count の単一のインスタンスのみが存在する必要があります。
ここがトリッキーな部分です。実際には、count の 2 つの異なるコピーが作成されます (count は static と宣言されていますが)。つまり、dll にロードして registerPlatforms() を呼び出すと、DIFFERENT カウント オブジェクトがインクリメントされます。
int main() {
Platform::count = 0;
Platform A; // increases count by 1, cout shows 1
loadPlugin(); // loads the shared library DerivedPlatform
DerivedPlatform D; // increases count by 1 again, cout shows 2
cout << Platform::getCount(); // shows 1 !!!!!!
}
これを解決する方法がわかりません。静的変数が 1 つだけ存続するようにする方法。どうやら DLL には静的変数用の独自のヒープがあるようです。