我做了一个DLL,我希望这个DLL文件在有多个程序需要调用的时候,只有一个程序可以成功调用这个dll文件,其他的都无法调用。换种方法说,我希望这个DLL文件在内存中只有一份拷贝 请问如何实现呢?之前别人的答复:
BOOL WINAPI DllMain( 
  HANDLE hinstDLL, 
  DWORD dwReason, 
  LPVOID lpvReserved 
); 
dwReason值是DLL_PROCESS_ATTACH时做判断是第二次调用就返回FALSE; 能不能具体点怎么做判断?怎么做判断是第二次调用?

解决方案 »

  1.   

    定义全局变量 bool g_Call = false;在dllmain中添加:if (DLL_PROCESS_ATTACH == dwReason)
    {
       if (g_Call)
          return FALSE;
       else
          g_Call = true;
    }
      

  2.   

    这种方法你自己有试过吗?按道理来说,DLL调用是在内存复制一份拷贝,全局变量和静态变量都不具有参照性的
      

  3.   

    应该定义共享变量,
    #pragma data_seg("Shared")     
    BOOL IsOne=FALSE;
    #pragma data_seg()
      

  4.   

    #pragma comment(linker,"/section:Shared,RWS")
      

  5.   

    通常的做法m_hMutex   =   OpenMutex   (MUTEX_ALL_ACCESS,   FALSE,   strClassName)   ;   
    if   (m_hMutex   ==   NULL)   
    {   
    //   m_hMutex不存在,表示没有其它实例在运行,创建一个m_hMutex   
    IsFirst = TRUE;
    m_hMutex   =   CreateMutex   (NULL,   TRUE,   strClassName)   ;   
    }   
    else   
    {   
       IsFirst = FALSE;
    }         
      

  6.   

    #4是正解,弄个递增记数Mutex也可以