Dada una instancia de un control ActiveX, ¿cómo enumero sus interfaces? (Me gustaría obtener los nombres de las interfaces).¿Cómo encontrar interfaces de un control ActiveX?
Respuesta
Al igual que otros han mencionado, la única manera es utilizar QueryInterface para todas las interfaces posibles. Y esto es exactamente lo que la herramienta de Microsoft OleView hace por ti.
De ninguna manera. La idea detrás de las interfaces COM es que le preguntes al objeto: "por favor dame la interfaz XYZ si la soportas" y el objeto decide cómo responder, proporciona la referencia a sí mismo o muestra la interfaz de algún objeto interno, etc. Así que puedes " t saber qué interfaces el objeto "admite" sin preguntar al objeto como se describió anteriormente. Esta fue la decisión de diseño de los diseñadores COM.
Desafortunadamente, eso no es algo para lo que esté COM. En el nivel COM básico, puede simplemente ask an object whether it supports una interfaz específica identificada por UUID, una a la vez. Dado que hay muchos UUID potenciales, obtener una lista exhaustiva de esa manera tomaría bastante tiempo. Aunque la mayoría de las implementaciones de objetos rastrearían internamente la lista de interfaces compatibles, existe no existe una forma COM estándar de acceder a esas listas desde el exterior. Y aunque las hubiera, solo se podía obtener un nombre programático de la interfaz al buscar su UUID en el registro, que no siempre es confiable.
ActiveX objects (a tricky term!) tienden a admitir la automatización a través de IDispatch
. Si los objetos se comportan bien, podrá get some information on the methods que admiten a través de GetTypeInfo()
. Este no incluirá los nombres de las interfaces (si las hay) a las que pertenecen los métodos.
En resumen, COM es bastante pobre en metadatos de objeto.
- 1. Cómo establecer ActiveX Control Nombre
- 2. Cómo agrego el control ActiveX de MFC a un proyecto de ActiveX existente
- 3. Control ActiveX sin formulario
- 4. ¿Cómo puedo detectar si un control ActiveX está cargado?
- 5. Cómo manejar un evento ActiveX en Javascript
- 6. Creando e implementando un control ActiveX en .NET
- 7. incrustando un control ActiveX simple tiene Clase no registrado error
- 8. ¿Prueba si un control ActiveX está instalado con Javascript?
- 9. cuadro de diálogo modal sobre el control Activex
- 10. Comunicándose con el servidor OLE o control ActiveX
- 11. Encontrar un control en un formulario web
- 12. Delphi 2010: EOleSysError 'no coincide el tipo' llamando control ActiveX
- 13. Win32: ¿Se requieren entradas de registro para registrar un control ActiveX?
- 14. ¿Documentación de Flash ActiveX API?
- 15. El uso de la reflexión para encontrar interfaces implementadas
- 16. Apartamento de un solo subproceso: no se puede crear una instancia del control ActiveX
- 17. Necesita control ActiveX para incrustar Excel en un cuadro de diálogo
- 18. Escribir un control ActiveX simple para IE que tiene un método
- 19. ¿Cómo puedo obtener el código fuente de la página a través de WebBrowser-Control (ActiveX InternetExplorer)?
- 20. ¿Cómo encontrar en Eclipse qué clases implementan múltiples interfaces?
- 21. Coloque un div sobre un objeto ActiveX
- 22. Cómo encontrar el control activo anterior: Delphi
- 23. Valor de cuadro de texto de ActiveX
- 24. Cómo vincular un socket a múltiples interfaces
- 25. COM/OLE/ActiveX/IDispatch confusion
- 26. ¿Qué es el contenedor ActiveX?
- 27. Cómo crear DLL ActiveX en Visual C++
- 28. ¿Dónde puedo encontrar un control de mapa para Delphi?
- 29. ¿Cómo mostrar la barra amarilla ActiveX?
- 30. ¿Cómo puedo hacer que un control ActiveX escrito con C# levante eventos en JavaScript al hacer clic?
Gracias por la respuesta muy detallada. Sin embargo, estaba buscando una solución práctica que la respuesta de Paul me proporcionó, así que la acepté. –