다음을 통해 공유


AfxLoadLibrary

사용 AfxLoadLibrary DLL 모듈을 매핑할 수 있습니다.

HINSTANCE AFXAPI AfxLoadLibrary(
   LPCTSTR lpszModuleName 
);

매개 변수

  • lpszModuleName
    모듈에 이름이 null로 끝나는 문자열을 가리키는 (중 하나를 합니다.DLL 또는.EXE 파일)입니다.지정한 이름이 모듈의 파일 이름입니다.

    경로 문자열을 지정 하지만 지정 된 디렉터리에 파일이 있는 경우 함수가 실패 합니다.

    경로 지정 하지 않은 경우 파일 이름 확장명을 생략 하면 기본 확장명입니다.DLL에 추가 됩니다.그러나 파일 이름 문자열 모듈 이름에 확장명이 없는 있음을 나타내기 위해 뒤에 점 문자 (.)를 포함할 수 있습니다.경로 지정 하면 함수는 다음 순서 대로 파일 검색:

    • 응용 프로그램에서 로드 하는 디렉터리입니다.

    • 현재 디렉터리

    • Windows 95/98: Windows 시스템 디렉터리입니다.Windows NT: 32 비트 Windows 시스템 디렉터리입니다.이 디렉터리의 이름은 SYSTEM32입니다.

    • Windows NT: 는 16 비트 Windows 시스템 디렉터리입니다.Win32 함수가이 디렉터리의 경로 얻는 이지만 검색 됩니다.이 디렉터리의 이름은 시스템입니다.

    • Windows 디렉터리.

    • PATH 환경 변수에 나열 된 디렉터리입니다.

반환 값

함수가 성공 하면 반환 값이 모듈에 대 한 핸들입니다.함수가 실패 하면 반환 값은 NULL입니다.

설명

사용할 수 있는 핸들을 반환 GetProcAddress DLL 함수의 주소를 가져올 수 있습니다.AfxLoadLibrary다른 실행 모듈을 매핑하는 데 사용할 수도 있습니다.

각 프로세스 각 로드 된 라이브러리 모듈의 참조 횟수를 유지 관리합니다.이 참조 횟수가 매번 증가 AfxLoadLibrary 라고 하며 때마다 감소 AfxFreeLibrary 라고 합니다.참조 횟수가 0이 되 면 해당 모듈은 호출 프로세스의 주소 공간에서 매핑되지 않은 및 핸들이 더 이상 유효 하지.

사용 해야 AfxLoadLibraryAfxFreeLibrary (Win32 함수 대신 LoadLibraryFreeLibrary) 다중 스레드 응용 프로그램에서 사용 하 고 동적으로 확장 DLL을 로드 하는 경우.사용 하 여 AfxLoadLibraryAfxFreeLibrary 에 대 한 확장 DLL 로드 하 고 언로드할 때 실행 시작 및 종료 코드가 전역 MFC 상태 손상 되어 있지.

사용 하 여 AfxLoadLibrary ; MFC의 DLL 버전에 동적으로 링크 해야 응용 프로그램에서 헤더 파일에 대 한 AfxLoadLibrary, Afxdll_.h은 MFC dll 응용 프로그램에 연결 되어 있는 경우를 포함 합니다.확장 Dll을 만들거나 사용 하는 MFC의 DLL 버전에 연결할 수 없으므로이 의도적으로 설계 된입니다.

예제

// 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();
}

요구 사항

헤더: afxdll_.h

참고 항목

참조

AfxFreeLibrary

개념

MFC 매크로 전역