다음을 통해 공유


DLL 함수

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

이 항목에서는 Microsoft DirectShow에서 구성 요소를 DLL(동적 연결 라이브러리)으로 구현하는 방법을 설명합니다.

DLL은 등록, 등록 취소 및 메모리에 로드할 수 있도록 다음 함수를 구현해야 합니다.

  • DllMain: DLL 진입점입니다. 이름 DllMain은 라이브러리 정의 함수 이름의 자리 표시자입니다. DirectShow 구현에서는 DllEntryPoint라는 이름을 사용합니다. 자세한 내용은 플랫폼 SDK를 참조하세요.
  • DllGetClassObject: 클래스 팩터리 instance 만듭니다. 이전 섹션에서 설명합니다.
  • DllCanUnloadNow: DLL을 안전하게 언로드할 수 있는지 여부를 쿼리합니다.
  • DllRegisterServer: DLL에 대한 레지스트리 항목을 만듭니다.
  • DllUnregisterServer: DLL에 대한 레지스트리 항목을 제거합니다.

이 중 처음 세 가지는 DirectShow에서 구현됩니다. 팩터리 템플릿이 m_lpfnInit 멤버 변수에 초기화 함수를 제공하는 경우 해당 함수는 DLL 진입점 함수 내부에서 호출됩니다. 시스템이 DLL 진입점 함수를 호출하는 경우에 대한 자세한 내용은 DllMain을 참조하세요.

DllRegisterServerDllUnregisterServer를 구현해야 하지만 DirectShow는 필요한 작업을 수행하는 AMovieDllRegisterServer2라는 함수를 제공합니다. 구성 요소는 다음 예제와 같이 단순히 이 함수를 래핑할 수 있습니다.

STDAPI DllRegisterServer()
{
    return AMovieDllRegisterServer2( TRUE );
}

STDAPI DllUnregisterServer()
{
    return AMovieDllRegisterServer2( FALSE );
}

그러나 DllRegisterServerDllUnregisterServer 내에서 필요에 따라 등록 프로세스를 사용자 지정할 수 있습니다. DLL에 필터가 포함된 경우 몇 가지 추가 작업을 수행해야 할 수 있습니다. 자세한 내용은 DirectShow 필터를 등록하는 방법을 참조하세요.

모듈 정의(.def) 파일에서 진입점 함수를 제외한 모든 DLL 함수를 내보냅니다. 다음은 예제 .def 파일입니다.

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

Regsvr32.exe 유틸리티를 사용하여 DLL을 등록할 수 있습니다.

DirectShow 필터 DLL을 만드는 방법