다음을 통해 공유


DirectShow 필터 빌드

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

DirectShow 기본 클래스는 DirectShow 필터를 구현하는 데 권장됩니다. 기본 클래스를 사용하여 빌드하려면 빌드 환경 설정에 나열된 단계 외에 다음 단계를 수행합니다.

  • SDK 루트 디렉터리 아래의 Samples\Multimedia\DirectShow\BaseClasses 디렉터리에 있는 기본 클래스 라이브러리를 빌드합니다. 라이브러리에는 소매 버전(Strmbase.lib)과 디버그 버전(Strmbasd.lib)의 두 가지 버전이 있습니다.
  • 헤더 파일 Streams.h를 포함합니다.
  • __stdcall 호출 규칙을 사용합니다.
  • 다중 스레드 C 런타임 라이브러리(적절하게 디버그 또는 소매)를 사용합니다.
  • DLL 함수를 내보내는 정의(.def) 파일을 포함합니다. 다음은 정의 파일의 예입니다. 출력 파일의 이름이 MyFilter.dll 가정합니다.
LIBRARY MYFILTER.DLL
EXPORTS 
    DllMain             PRIVATE
    DllGetClassObject   PRIVATE
    DllCanUnloadNow     PRIVATE
    DllRegisterServer   PRIVATE
    DllUnregisterServer PRIVATE
  • 다음 lib 파일에 연결합니다.
레이블
빌드 디버그 Strmbasd.lib, Msvcrtd.lib, Winmm.lib
소매 빌드 Strmbase.lib, Msvcrt.lib, Winmm.lib
  • 링커 설정에서 "기본 라이브러리 무시" 옵션을 선택합니다.
  • 다음과 같이 소스 코드에서 DLL 진입점을 선언합니다.
extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
    return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
}

이전 버전

DirectShow 9.0 이전의 기본 클래스 라이브러리 버전에 대해서도 다음을 수행해야 합니다.

  • 디버그 빌드의 경우 전처리기 플래그 DEBUG를 정의합니다.

DirectShow 9.0 이상에서 사용할 수 있는 기본 클래스 라이브러리 버전에는 이 단계가 필요하지 않습니다.

DirectShow 기본 클래스

DirectShow 필터 작성