应用程序加载常规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
答案 0 :(得分:1)
最好的方法是将您在DllMain中作为参数接收的句柄存储在全局变量中,或者,如果它是MFC dll,它应该已经存储在CWinApp :: m_hInstance中。