一个dll的单身班

前端之家收集整理的这篇文章主要介绍了一个dll的单身班前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个类的静态库:
class CLog
{
   private:
   CLog();
   ...
   ...
   public:
   static CLog& GetInstance()                                
   {
           static CLog Instance;
           return Instance;
   }
   void Write(char *cpPr);
};
#define Log CLog::GetInstance()

这个图书馆链接到一个dll和一个主程序.该DLL由LoadLibrary加载.在这种情况下,显而易见的是,在主exe和dll中调用Log.Write会创建两个单独的CLog实例.任何想法如何解决这个问题,仍然提供动态加载dll?

问题是,连接静态库的每个项目(无论是主程序还是DLL)都将获得静态变量的单独副本.这打破了创建单身的典型方法.

最简单的方法是创建另一个保存单例的DLL,而不是一个静态库.由于只有一个链接输出将包含静态变量,因此问题得到解决.

在我自己的情况下,我创建了一个单身经理,通过一个独特的GUID来识别每个单例,并确保只有一个副本存在于应用程序范围内.单身人士管理人员作为自己的DLL存在.

原文链接:https://www.f2er.com/windows/370215.html

猜你在找的Windows相关文章