Приложение загружает обычную 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
..........
}
}
Проект был перенесен из 6 студий в 2010 году. В 6 AfxGetInstanceHandle ()верните правильное значение.GetLastError () возвращает 0. Почему AfxGetInstanceHandle () возвращает NULL?Как это исправить?vs2010_sp1, win7_x64