다음을 통해 공유


AfxLoadLibrary

DLL 모듈을 매핑하기 위하여 AfxLoadLibrary를 사용합니다.

HINSTANCE AFXAPI AfxLoadLibrary( 
   LPCTSTR lpszModuleName  
);

매개 변수

  • lpszModuleName
    모듈의 이름을 포함하는 null로 종료되는 문자열을 가리킵니다.(DLL 또는.EXE 파일 중 하나) 지정된 이름은 모듈의 파일 이름입니다.

    문자열이 경로를 지정했으나 파일이 지정된 경로에 존재하지 않는 경우, 함수는 실패합니다.

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

    • 응용 프로그램이 로드되는 디렉터리

    • 현재 디렉터리

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

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

    • Windows 디렉터리.

    • PATH 환경 변수에 나열된 디렉터리

반환 값

함수가 성공하면, 반환 값은 모듈의 핸들입니다. 함수가 실패할 경우에는 NULL이 반환됩니다.

설명

GetProcAddress에서 DLL 함수의 주소를 얻기 위해 사용될 수 있는 핸들을 반환합니다. AfxLoadLibrary은 다른 실행 파일 모듈을 매핑하기 위해 사용될 수도 있습니다.

각 프로세스는 각 로드된 라이브러리 모듈에 대한 참조 횟수를 유지합니다. 이 참조 횟수는 AfxLoadLibrary가 호출될 때마다 증가되고, AfxFreeLibrary가 호출될 때마다 감소됩니다. 참조 횟수가 0에 도달하면, 모듈은 호출 프로세스의 주소 공간에서 매핑되지 않고 핸들은 더 이상 유효하지 않습니다.

사용자 응용 프로그램이 많은 스레드를 사용하거나 그것이 확장명 DLL을 동적으로 로드했을 경우, AfxLoadLibraryAfxFreeLibrary을 사용하는 것 (Win32 함수 LoadLibraryFreeLibrary대신)을 보장합니다. AfxLoadLibraryAfxFreeLibrary를 사용하면 확장 DLL이 로드되거나 언로드될 때 실행되는 시작 코드와 종료 코드가 전역 MFC 상태를 손상시키지 않게 됩니다.

응용 프로그램에서 AfxLoadLibrary를 사용하는 것은 동적으로 MFC의 DLL 버전에 링크하는 사용자를 요구합니다. MFC가 DLL으로서 응용 프로그램에 연결되면 AfxLoadLibrary의 헤더 파일, Afxdll_h만 포함됩니다. 사용자가 확장명 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();
}

요구 사항

Header: afxdll_.h

참고 항목

참조

AfxFreeLibrary

개념

MFC 매크로 및 전역