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 이상에서 사용할 수 있는 기본 클래스 라이브러리 버전에는 이 단계가 필요하지 않습니다.