Приложение загружает обычную 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