2010-12-27 18 views
6

¿Es posible crear una instancia de un objeto COM con solo el dll y sin regsvr32?Crear objeto COM desde archivo sin regsvr32

Mi objetivo principal aquí es crear una instancia de un filtro directshow e insertarlo en mi gráfico, pero no quiero que regsvr32 registre el filtro. El filtro estará en un dll/ax que se distribuirá con mi aplicación y estará presente en mi camino. También conoceré el CLSID.

Así que, básicamente, todo lo que necesito es una forma de crear una instancia del tipo con solo el dll/ax y el CLSID. ¿Es esto posible en C#?

Respuesta

7

Parece que quiere usar registration-free COM.

+2

FYI: No, no puede usar la fusión para esto ya que los filtros Directx necesitan más claves de registro para registrarse correctamente en el gráfico de filtro de lo que la fusión puede proporcionar. – wqw

+0

@wqw Si este es el caso, probablemente desee agregar esto como respuesta, ya que ninguno de los enfoques para usar un componente COM sin registrarlo funcionará en este caso. –

+0

@wqw: Sin embargo, es posible que puedas usar RegOverridePredefKey para esas cosas. (http://msdn.microsoft.com/en-us/library/ms724901%28VS.85%29.aspx) –

1

Cuando crea una instancia COM, Windows busca en el registro, averigua qué dll cargar, cómo cargarlo, y luego carga el dll y encuentra la clase que estaba buscando. Si desea omitir este algoritmo de búsqueda, entonces debe implementarlo, y no creo que sea fácil. Pero ciertamente factible.

ACTUALIZACIÓN: busque la función CoLoadLibrary, tal vez no sea tan difícil después de todo. Creo que los servidores COM llaman a CoRegisterClassObject cuando se cargan, así es como Windows los encuentra, y puede llamar a CoGetClassObject. Todavía estoy en la oscuridad, así que adelante y lea MSDN.

3

Es posible, LoadLibrary() y GetProcAddress obtener el punto de entrada DllGetClassObject(). Está pasando por alto un montón de código de plomería COM que fue diseñado para hacerlo caer en el pozo del éxito. Especialmente las cosas que se encargan del ThreadingModel. O los trucos que puede usar para hacer que el código de 32 bits se ejecute en un proceso de 64 bits, tienden a ser importantes con el video.

El uso de COM sin registro con un manifiesto puede hacer que te vuelvas a caer en ese pozo.

+0

+1, lo hacemos sin ningún problema grave. Una advertencia es que no habrá marshalling. – sharptooth

Cuestiones relacionadas