共用方式為


在 DLL 中建立File-Handler實例

[與此頁面相關聯的功能 自訂檔案和串流處理常式是舊版功能。 它已被 MediaStreamSource 類別取代。 MediaStreamSource 類別已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaStreamSource 類別 ,而不是 自訂檔案和資料流程處理常式。 Microsoft 建議盡可能重寫使用舊版 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; 
}