I have created a simple RAII class in one of my DLLs (let's call it the exporting
DLL) which monitors for configuration restore in my application:
class __declspec(dllexport) CEmuConfigurationRestoreMonitor
{
public:
CEmuConfigurationRestoreMonitor()
{
m_restoreInProgress = true;
}
~CEmuConfigurationRestoreMonitor()
{
m_restoreInProgress = false;
}
static bool IsRestoreInProgress()
{
return m_restoreInProgress;
}
private:
static bool m_restoreInProgress;
};
bool CEmuConfigurationRestoreMonitor::m_restoreInProgress = false;
The idea is that the restore code in the exporting
DLL will instantiate a CEmuConfigurationRestoreMonitor
on the stack and when it goes out of scope at the end of the method, the flag will be switched off.
The problem is that I want to query the flag, using IsRestoreInProgress()
, from another DLL (let's say the importing
DLL). This is why I put __declspec(dllexport)
in the class declaration in the exporting
DLL.
When I link the importing
DLL, I got an unresolved symbol for m_restoreInProgress
. So I added the following line to a .cpp file in the importing
DLL and it fixes that issue:
bool CEmuConfigurationRestoreMonitor::m_restoreInProgress = false;
What I am finding now is that even if m_restoreInProgress
is set to true
, when I query it from the importing
DLL, it's always returning false
.
Is the static initialization in the importing
DLL somehow overriding the real (current) value in the exporting
DLL?
You've given each DLL its own copy of m_restoreInProgress.
You could fix this by: