AfxGetInstanceHandle()在常规mfc dll中返回null

时间:2011-12-12 19:57:56

标签: dll mfc

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

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 个答案:

答案 0 :(得分:1)

最好的方法是将您在DllMain中作为参数接收的句柄存储在全局变量中,或者,如果它是MFC dll,它应该已经存储在CWinApp :: m_hInstance中。