c++ - método - Uso del Modelo de objetos componentes(COM) en plataformas que no son de Microsoft
dcom que es (3)
Creo que debería poder utilizar la herramienta gratuita Ole / Com Object Viewer para crear los archivos de encabezado.
Me encuentro regularmente en situaciones similares: tengo un montón de COM .DLL (sin archivos IDL) que necesito usar e invocar para poder acceder a algún formato de datos extranjero (no abierto, no documentado).
La plataforma Visual Studio de Microsoft tiene capacidades muy buenas para importar dichas DLL COM y usarlas en mi proyecto (directiva #import de Visual C ++, o seleccionarlas y agregarlas usando los diálogos de Visual Basic .NET), y esa es la manera recomendada por los vendedores de usarlas.
Me interesaría encontrar una forma de usar esos archivos DLL en plataformas de desarrollo que no sean de Microsoft. A saber, el uso de estas clases COM en el proyecto C ++ compilado con MinGW o Cygwin, o incluso el puerto GCC de Wine a Linux (compila C ++ que dirige Win32 al binario que se ejecuta de forma nativa en Linux).
Tengo un éxito limitado con este controlador, pero esto no funciona en el 100% de las situaciones (no puedo usar objetos COM devueltos por algunos métodos).
¿Alguien ha tenido éxito en situaciones similares?
El problema con el visor de objetos Ole / Com empaquetado con Visual Studio y Windows SDKs es que produce un .IDL roto fuera del .DLL, que MIDL no puede compilar más en un par .H / .CPP.
La nueva implementación de OleViewer de Wine es actualmente inestable y falla al intentar usar esas bibliotecas.
Respondiendo a mí mismo, pero logré encontrar la biblioteca perfecta para las llamadas OLE / COM en compiladores que no sean de Microsoft: disphelper .
(está disponible en sourceforge.net bajo una licencia BSD permisiva).
Funciona tanto en C como en C ++ (y, por lo tanto, en cualquier otro lenguaje con enlaces C). Utiliza una sintaxis de cadena de formato printf / scanf-like.
(Usted pasa lo que quiera siempre que lo especifique en la cadena de formato, a diferencia de XYDispDriver, que requiere que los argumentos coincidan exactamente con lo que se especifique en la biblioteca de tipos).
Lo modifiqué un poco para hacerlo compilar bajo Linux con WineGCC (para producir el elfo nativo de Linux a partir del código Win32), y para manejar llamadas "por ref" automáticamente (stock disthelper requiere que el programador configure su propio VARIANT) .
Mi versión parchada y parches están disponibles como un tenedor en github:
Y aquí están mis parches: