AfxGetInstanceHandle () возвращает ноль в обычном MFC DLL - PullRequest
3 голосов
/ 12 декабря 2011

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

1 Ответ

1 голос
/ 13 декабря 2011

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

...