DLL에서 File-Handler 인스턴스 만들기
[사용자 지정 파일 및 스트림 처리기 이 페이지와 연결된 기능은 레거시 기능입니다. MediaStreamSource 클래스는 에 의해로 대체되었습니다. MediaStreamSource 클래스 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 사용자 지정 파일 및 스트림 처리기 대신 MediaStreamSource 클래스 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
애플리케이션이 파일 처리기 DLL 또는 스트림 처리기를 지정하는 경우 시스템은 해당 클래스 식별자에 의해 레지스트리에서 이를 조회하고 로드합니다. 그런 다음 시스템은 DLL의 DllGetClassObject 함수를 호출하여 파일 또는 스트림 처리기의 인스턴스를 만듭니다. 다음 예제(C++로 작성됨)는 파일 처리기가 인스턴스를 만드는 방법을 보여 줍니다.
// Main DLL entry point.
STDAPI DllGetClassObject(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
HRESULT hresult;
hresult = CAVIFileCF::Create(rclsid, riid, ppv);
return hresult;
}
HRESULT CAVIFileCF::Create(const CLSID FAR& rclsid,
const IID FAR& riid, void FAR* FAR* ppv)
{
// The following is the class factory creation and not an
// actual PAVIFile.
CAVIFileCF FAR* pAVIFileCF;
IUnknown FAR* pUnknown;
HRESULT hresult;
// Create the instance.
pAVIFileCF = new FAR CAVIFileCF(rclsid, &pUnknown);
if (pAVIFileCF == NULL)
return ResultFromScode(E_OUTOFMEMORY);
// Set the interface pointer.
hresult = pUnknown->QueryInterface(riid, ppv);
if (FAILED(GetScode(hresult)))
delete pAVIFileCF;
return hresult;
}