2011-12-12 47 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。