Поделиться через


AfxLoadLibrary

Используйте AfxLoadLibrary для сопоставления модуль DLL.

HINSTANCE AFXAPI AfxLoadLibrary( 
   LPCTSTR lpszModuleName  
);

Параметры

  • lpszModuleName
    Указывает на объединения завершенной строку, содержащую имя модуля (или DLL или EXE). Указанное имя имя файла модуля.

    Если строка задает путь, но файл не существует в указанном каталоге, функция завершается с ошибкой.

    Если путь не указан и расширение имени файла не задано, по умолчанию добавляется расширение DLL. Однако строка имени файла может включать обратную символ точки (.), чтобы указать, что имя модуля не имеет расширение. При отсутствии путь не указан, поиск функции для файла в следующей последовательности:

    • Каталог, из которого приложение отладчика.

    • Текущий каталог.

    • Windows 95/98. Системный каталог Windows. Windows NT: 32 — Системный каталог Windows. Имя этого каталога SYSTEM32.

    • Windows NT только: 16 — Системный каталог Windows. Отсутствует функция Win32, которая получает путь к этому каталогу, но выполнян поиск. Имя этого каталога SYSTEM.

    • Каталог Windows.

    • Каталоги, указанные в переменной среды PATH.

Возвращаемое значение

Если функция завершается успешно, возвращенное значение дескриптора в модуль. Если функция завершается с ошибкой, возвращенное значение NULL.

Заметки

Он возвращает дескриптор, который можно использовать в GetProcAddress, чтобы получить адрес функции DLL. AfxLoadLibrary также можно использовать для сопоставления другие исполняемые модули.

Каждый процесс поддерживает счетчик ссылок для каждого модуля, загруженной библиотеки. Этот счетчик ссылок инкрементирован при каждом вызове и AfxLoadLibrary декрементируемое вызывается каждый раз AfxFreeLibrary. Когда число ссылок достигает нуля, модуль несопоставленных из адресного пространства процесса при вызове и дескриптор больше не является допустимым.

Убедитесь в том, что используется AfxLoadLibrary и AfxFreeLibrary (вместо функций Win32 LoadLibrary и FreeLibrary), если приложение использует несколько потоков и, если она динамически загружает библиотеку DLL расширения. С помощью AfxLoadLibrary и AfxFreeLibrary гарантирует, что запуска и завершения работы код, который выполняется при загрузке и выгрузке библиотеки DLL расширения не приведет к повреждению глобального состояния MFC.

С помощью AfxLoadLibrary в приложении необходимо динамически связано с версией MFC DLL; файл заголовка для AfxLoadLibrary, Afxdll_.h включен, только если MFC связан в приложение в виде библиотеки DLL. Это предусмотрено разработчиками, поскольку необходимо связать с версии библиотек DLL MFC для использования или для создания библиотеки расширения.

Пример

// The following shows how to create a MDI based application 
// using a generic CView derived class that is implemented in 
// a dynamically loaded MFC Extension DLL. 

typedef CRuntimeClass * (*GETDLLVIEW)();

BOOL CUserApp::InitInstance()
{
   // Standard Application Wizard generated initialization excluded.



...


   // Register the application's document templates.  Document templates 
   //  serve as the connection between documents, frame windows and views 

   //Load MFC Extension DLL based view class.
   m_hViewDll = AfxLoadLibrary(szMyViewDllPath);
   if (!m_hViewDll)
   {
      CString str;
      str.Format(_T("Error: Cannot find component %s"), szMyViewDllPath);
      AfxMessageBox(str);
      return FALSE;
   }

   GETDLLVIEW GetMyView = (GETDLLVIEW)GetProcAddress(m_hViewDll, "GetMyView");
   ASSERT(GetMyView != NULL);

   CMultiDocTemplate* pDocTemplate;
   pDocTemplate = new CMultiDocTemplate(IDR_NVC_MFC_DLLUserTYPE,
      RUNTIME_CLASS(CUserDoc),
      RUNTIME_CLASS(CChildFrame), // custom MDI child frame
      GetMyView());
   if (!pDocTemplate)
      return FALSE;
   AddDocTemplate(pDocTemplate);

   // Standard Application Wizard generated initalization excluded.



...


   return TRUE;
}

int CUserApp::ExitInstance()
{
   if (NULL != m_hViewDll)
   {
      AfxFreeLibrary(m_hViewDll);
      m_hViewDll = NULL;
   }

   return CWinApp::ExitInstance();
}

Требования

Header: afxdll_.h

См. также

Ссылки

AfxFreeLibrary

Основные понятия

Макросы и глобальные объекты MFC