我用类创建了一个静态库:
class CLog
{
private:
CLog();
...
...
public:
static CLog& GetInstance()
{
static CLog Instance;
return Instance;
}
void Write(char *cpPr);
};
#define Log CLog::GetInstance()
Run Code Online (Sandbox Code Playgroud)
该库链接到dll和主程序.该DLL由LoadLibrary加载.在这种情况下很明显,在主exe和dll中调用Log.Write会创建两个独立的CLog实例.任何想法如何解决这个问题仍然提供动态加载DLL?
Mar*_*som 11
问题是每个链接静态库的项目,无论是主程序还是DLL,都将获得静态变量的单独副本.这打破了创建单例的典型方法.
最简单的方法是创建另一个包含单例的DLL,而不是静态库.由于只有一个链接器输出将包含静态变量,因此问题得以解决.
在我自己的情况下,我创建了一个单例管理器,它通过唯一的GUID识别每个单例,并确保应用程序范围内只存在一个副本.单例管理器作为自己的DLL存在.