Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine, e Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente per il nuovo codice di utilizzare MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Il passaggio finale consiste nell'implementare la funzione DllRegisterServer. La DLL che contiene il componente deve esportare questa funzione. La funzione verrà chiamata da un'applicazione di configurazione o quando l'utente esegue lo strumento Regsvr32.exe.
L'esempio seguente illustra un'implementazione minima di DlLRegisterServer:
STDAPI DllRegisterServer(void)
{
return AMovieDllRegisterServer2(TRUE);
}
La funzione AMovieDllRegisterServer2 crea voci del Registro di sistema per ogni componente nel
g_Templates
array Tuttavia, questa funzione presenta alcune limitazioni. Prima di tutto, assegna ogni filtro alla categoria "DirectShow Filters" (CLSID_LegacyAmFilterCategory), ma non tutti i filtri appartengono a questa categoria. I filtri di acquisizione e i filtri di compressione, ad esempio, hanno categorie personalizzate. In secondo luogo, se il filtro supporta un dispositivo hardware, potrebbe essere necessario registrare due informazioni aggiuntive che AMovieDLLRegisterServer2 non gestisce: il medio e la categoria di pin . Un supporto definisce un metodo di comunicazione in un dispositivo hardware, ad esempio un bus. La categoria pin definisce la funzione di un pin. Per informazioni sui supporti, vedere "KSPIN_MEDIUM" in Microsoft Windows Driver Development Kit (DDK). Per un elenco delle categorie di pin, vedere Set di proprietà pin.
Se desideri specificare una categoria di filtro, un supporto o una categoria pin, chiama il metodo IFilterMapper2::RegisterFilter dall'interno di DllRegisterServer. Questo metodo accetta un puntatore a una struttura REGFILTER2, che specifica informazioni sul filtro.
Per complicare in qualche modo, la struttura REGFILTER2 supporta due formati diversi per la registrazione dei pin. Il membro dwVersion specifica il formato:
- Se dwVersion è 1, il formato del pin è AMOVIESETUP_PIN (descritto in precedenza).
- Se dwVersion è 2, il formato del pin è REGFILTERPINS2.
La struttura REGFILTERPINS2 include voci per i medium dei pin e le categorie dei pin. Usa anche flag di bit per alcuni elementi che AMOVIESETUP_PIN dichiara come valori booleani.
L'esempio seguente illustra come chiamare IFilterMapper2::RegisterFilter dall'interno di DllRegisterServer:
REGFILTER2 rf2FilterReg = {
1, // Version 1 (no pin mediums or pin category).
MERIT_NORMAL, // Merit.
1, // Number of pins.
&sudPins // Pointer to pin information.
};
STDAPI DllRegisterServer(void)
{
HRESULT hr;
IFilterMapper2 *pFM2 = NULL;
hr = AMovieDllRegisterServer2(TRUE);
if (FAILED(hr))
return hr;
hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
IID_IFilterMapper2, (void **)&pFM2);
if (FAILED(hr))
return hr;
hr = pFM2->RegisterFilter(
CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
NULL, // Device moniker.
&CLSID_VideoCompressorCategory, // Video compressor category.
g_wszName, // Instance data.
&rf2FilterReg // Pointer to filter information.
);
pFM2->Release();
return hr;
}