2010-08-13 30 views

Respuesta

2

Básicamente llama a su dll (llamado filename.ax en este caso) y llama a su método "DllRegisterServer".

En el caso de los filtros directshow, podría "registrar" esos filtros en el registro de Windows para que directshow los conozca.

ejemplo: https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L698 llama https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L631

Aunque hay versiones más simples que hay.

+0

Ambos enlaces github ya no funcionan - ¿puede editar los ejemplos en su respuesta? – codingbadger

+1

se arrepiente de eso – rogerdpack

0

regsvr32 registra DLL y EXEs en el Registro de Windows (generalmente bibliotecas de tipo COM, ID de clase, ID de interfaz, etc.). Puede usar regedit para navegar por el registro.

+1

Pero, ¿cómo funciona? ¿Qué clase de efecto tiene? – wamp

29

COM que es ampliamente utilizado en Windows se basa en el registro. Un componente proporcionará bibliotecas de tipos, interfaces y clases. Cada uno de estos está definido por un GUID para nombrarlos de manera exclusiva. Los componentes COM también pueden definir ProgID's que son una especie de atajos para los GUID poco manejables.

Toda esta información se almacena en una sección de registro especial en el equipo llamado HKEY_CLASSES_ROOT. Use RegEdit.exe para verlo. En particular, puede encontrar bibliotecas de tipos en HKEY_CLASSES_ROOT\TypeLib, interfaces en HKEY_CLASSES_ROOT\Interface y clases en HKEY_CLASSES_ROOT\CLSID. Parte de la información en el registro contendrá la ruta de la DLL real con el componente que permite que Windows localice y cargue el componente cuando se solicite.

Cuando instala un componente COM, es necesario crear la información de registro correcta. Por convención la DLL puede proporcionar dos funciones exportadas:

Cuando se ejecuta el RegSvr32.exe MyComponent.dllRegSvr32.exe ejecutable intentará llamar DllRegisterServer en MyComponent.dll. Se supone que la DLL crea todas las entradas de registro necesarias para permitir que se use el componente.

De forma similar, puede usar RegSvr32.exe /u MyComponent.dll para anular el registro del componente. Eso eliminará toda la información agregada previamente al registro.

Windows depende en gran medida de COM y es muy importante que los registros COM estén actualizados. Lamentablemente, no hay nada que le impida eliminar un componente COM ya registrado. Esto dejará punteros colgantes en el registro apuntando a la DLL que ya no existe. Ni siquiera puedes anular el registro porque ya no existe.

Otro problema es cuando dos aplicaciones diferentes requieren versiones diferentes del mismo componente. El registro solo puede apuntar a una de las dos versiones, y esto puede causar que una de las aplicaciones falle.

Microsoft ha creado soluciones para estos problemas. Es mucho mejor proporcionar un instalador para el componente COM que puede reparar y desinstalar el componente si se ha eliminado. También puede crear una instalación lado a lado del mismo componente en diferentes versiones.

+0

Respuesta de muy alta calidad, gracias – AFract

Cuestiones relacionadas