2011-12-12 100 views
3

应用程序加载常规dll。此dll中的每个函数都包含AFX_MANAGE_STATE(AfxGetStaticModuleState())。预处理器定义中包含宏_USRDLL和_​​AFXDLL。例如,从常规DLL(MYDLL.DLL)导出功能:AfxGetInstanceHandle()在常规mfc dll中返回null

BOOL RM_GetModule(IRMPage** ppInterface) 
    { 
     AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
     HINSTANCE hInst = AfxGetInstanceHandle(); //**return NULL** 
     ........ 
    } 

应用:

BOOL CReMain2Dlg::OnInitDialog() 
    { 
     CDialog::OnInitDialog(); 
     .......... 
     HINSTANCE hmCurrentModule; 
     if((hmCurrentModule = AfxLoadLibrary("mydll.dll"))){ 
      (FARPROC&)pPageItem->pfGetModule = GetProcAddress( 
              hmCurrentModule, "RM_GetModule"); 
      pPageItem->pfGetModule(&(pPageItem->pPage)); //call 
      .......... 
     }   
    } 

该项目于2010年转出6个工作室在6 AfxGetInstanceHandle()返回正确的值。 GetLastError()返回0.为什么AfxGetInstanceHandle()返回NULL?如何解决它? vs2010_sp1,win7_x64

回答

1

的最好方法是存储您作为参数的DllMain在一个全局变量,或者,手柄的情况下,这是一个MFC DLL,它应该已经被存储在的CWinApp :: m_hInstance。