Я пытаюсь использовать переменные и функции статического класса в динамически загружаемой dll, которые являются подклассами исходного класса. Эти статические члены используются в статически связанном классе; этот класс загружает библиотеки DLL с использованием фабрики, и эти библиотеки должны иметь доступ к статическим функциям и переменным. Вот краткий пример простой демонстрации (то есть не ожидайте, что он скомпилируется; фактические классы имеют более 1000 строк в каждой):
//GenericBase.h-------------------------
#include "GenericDll.h"
class GenericBase{
public:
GenericBase()
{
mClassA.addInstance(this);
}
static int mNumInstances;
static void DoSomething();
static void Foo();
static void LoadDlls();
set<GenericDll*> mPlugins;
};
//--------------------------------------
//GenericDll.h--------------------------
class GenericDll : public GenericBase
{
void Function();
};
extern "C" __declspec (dllexport) GenericDll* CreateModule()
{
GenericDll * module = new GenericDll();
return module;
}
//--------------------------------------
//GenericBase.cpp-----------------------
void GenericBase::DoSomething()
{
for (it = mPlugins.begin(); it != mPlugins.end(); it++)
it->Function();
}
//--------------------------------------
//GenericDll.cpp------------------------
void GenericDll::Function()
{
mNumInstances++; // mNumInstancesin GenericDll and mNumInstances in
// the static linked GenericBase have different
// addresses
cout << &mNumInstances<<endl;
Foo(); // again, the address Foo() is different in the dll
}
//--------------------------------------
//main.cpp
int main(){
GenericBase g;
GenericBase::LoadDlls(); //not shown
GenericBase::DoSomething();
cout << &mNumInstances << endl;
}
//Output: these are the addresses of the mNumInstances
>> 00FAC3B0
>> 0F753398
>> 004D3398
Итак, общий вопрос или цель: как сделать адрес mNumInstances одинаковым для статически связанного объекта и динамически загружаемых классов dll, которые подклассируют этот объект?
Надеюсь, это достаточно ясно и имеет смысл!