Pregunta

Regularmente me encuentro con situaciones similares:Tengo un montón de archivos COM .DLL (sin archivos IDL) que necesito usar e invocar para poder acceder a algún formato de datos externo (no abierto, no documentado).

La plataforma Visual Studio de Microsoft tiene muy buenas capacidades para importar tales archivos DLL COM y usarlos en mi proyecto (la directiva #import de Visual C++, o seleccionarlos y agregarlos usando los cuadros de diálogo de Visual Basic .NET), y esa es la forma recomendada por los proveedores de usarlos.

Me interesaría encontrar una manera de utilizar esas DLL en plataformas de desarrollo que no sean de Microsoft.Es decir, usar estas clases COM en un proyecto C++ compilado con MinGW o Cygwin, o incluso el puerto GCC de Wine para Linux (compila C++ dirigido a Win32 en binario que se ejecuta de forma nativa en Linux).

He tenido un éxito limitado usando este controlador, pero esto no tiene éxito en el 100% de las situaciones (no puedo usar objetos COM devueltos por algunos métodos).

¿Alguien ha tenido éxito en situaciones similares?

¿Fue útil?

Solución

Respondiéndome a mí mismo pero logré encontrar el perfecto Biblioteca para llamadas OLE/COM en compiladores que no son de Microsoft: disipador.

(está disponible en fuenteforge.net bajo una licencia BSD permisiva).

Funciona tanto en C como en C++ (y por lo tanto también en cualquier otro lenguaje con enlaces C).Utiliza un printf/scanf-como formato de sintaxis de cadena.
(Pasas lo que quieras siempre que lo especifiques en la cadena de formato, a diferencia Controlador XYDisp lo que requiere que los argumentos coincidan exactamente con lo que se especifica en la biblioteca de tipos).

Lo modifiqué un poco para que también se compilara en Linux con WineGCC (para producir elf nativo de Linux a partir del código Win32) y para manejar llamadas "por referencia" automáticamente (el stock disthelper requiere que el programador configure su propia VARIANTE) .

Mi versión parcheada y mis parches están disponibles como una bifurcación en github:

Y aquí están mis parches:

Otros consejos

El problema con el Visor de objetos Ole/Com empaquetado con Visual Studio y los SDK de Windows es que produce un .IDL roto a partir del .DLL, que MIDL no puede compilar en un par .H/.CPP.

La reimplementación de OleViewer por parte de Wine es actualmente inestable y falla al intentar usar esas bibliotecas.

Creo que deberías poder utilizar la herramienta gratuita Ole/Com Object Viewer para crear los archivos de encabezado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top