AfxGetInstanceHandle() возвращает null в обычной 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
           ..........
       }        
   }

Проект был передан из 6 студий в 2010 году. В 6 AfxGetInstanceHandle() возвращает правильное значение. GetLastError() возвращает 0. Почему AfxGetInstanceHandle() возвращает NULL? Как это исправить? vs2010_sp1, win7_x64


person made_in_russia    schedule 12.12.2011    source источник


Ответы (1)


Лучший способ — сохранить дескриптор, который вы получаете в качестве параметра в DllMain, в глобальной переменной или, в случае, если это dll MFC, он уже должен быть сохранен в CWinApp::m_hInstance.

person sashoalm    schedule 13.12.2011