我在我的一个DLL中创建了一个简单的RAII类(我们称之为exporting
DLL),它监视我的应用程序中的配置恢复:
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;
我们的想法是exporting
DLL中的恢复代码将在堆栈上实例化CEmuConfigurationRestoreMonitor
,当它在方法结束时超出范围时,该标志将被关闭。
问题是我想使用IsRestoreInProgress()
从另一个DLL(比如importing
DLL)查询标志。这就是我将__declspec(dllexport)
放在exporting
DLL中的类声明中的原因。
当我链接importing
DLL时,我得到m_restoreInProgress
的未解析符号。所以我将以下行添加到importing
DLL中的.cpp文件中,它解决了这个问题:
bool CEmuConfigurationRestoreMonitor::m_restoreInProgress = false;
我现在发现的是,即使m_restoreInProgress
设置为true
,当我从importing
DLL查询时,它总是返回false
。
importing
DLL中的静态初始化是否会以某种方式覆盖exporting
DLL中的实际(当前)值?
答案 0 :(得分:2)
您已经为每个DLL提供了自己的m_restoreInProgress副本。
您可以通过以下方式解决此问题: