2010-12-27 11 views
6

È possibile creare un'istanza di un oggetto COM solo con la DLL e senza regsvr32?Crea un oggetto COM da un file senza regsvr32

Il mio obiettivo principale qui è creare un'istanza di un filtro directshow e inserirlo nel mio grafico, ma non voglio che regsvr32 registri il filtro. Il filtro sarà in una dll/ax che verrà distribuito con la mia applicazione e sarà presente nel mio percorso. Conoscerò anche il CLSID.

Quindi, in pratica, tutto ciò di cui ho bisogno è un modo per creare un'istanza del tipo pur avendo la DLL/l'ascia e il CLSID. È possibile in C#?

risposta

7

Suoni come si desidera utilizzare registration-free COM.

+2

FYI: No, non è possibile utilizzare la fusione per questo poiché i filtri Directx richiedono più chiavi reg per registrarsi correttamente nel grafico del filtro di quanto non possa fornire la fusione. – wqw

+0

@wqw Se questo è il caso, probabilmente si vuole aggiungere questo come risposta, poiché nessuno degli approcci per l'utilizzo di un componente COM senza la registrazione funzionerà per questo caso. –

+0

@wqw: Potrebbe essere possibile usare RegOverridePredefKey per quella roba, però. (http://msdn.microsoft.com/en-us/library/ms724901%28VS.85%29.aspx) –

1

Quando si crea un'istanza COM, Windows cerca nel registro, trova la DLL da caricare, come caricarla, quindi carica la DLL e trova la classe che si stava cercando. Se vuoi saltare questo algoritmo di ricerca, devi implementarlo e non penso sia facile. Ma certamente fattibile.

AGGIORNAMENTO: cercare la funzione CoLoadLibrary, forse non è poi così difficile. Penso che i server COM chiamino CoRegisterClassObject quando vengono caricati, è così che Windows li trova e puoi chiamare CoGetClassObject. Sono ancora al buio, quindi, quindi vai avanti e leggi MSDN.

3

E 'possibile, LoadLibrary() e GetProcAddress per ottenere il punto di accesso DllGetClassObject(). Stai bypassando una serie di codici idraulici COM che sono stati progettati per farti cadere nel baratro del successo. Soprattutto le cose che si prendono cura di ThreadingModel. Oppure i trucchi che puoi usare per far girare il codice a 32 bit in un processo a 64 bit, tendono ad essere importanti con il video.

L'utilizzo di COM reg-free con un manifest può farti cadere in quel pozzo.

+0

+1, lo facciamo senza problemi seri. Un avvertimento è che non ci sarà il marshalling. – sharptooth

Problemi correlati