2008-09-17 14 views
29

Me encuentro regularmente en situaciones similares: Tengo un montón de COM .DLL (sin archivos IDL) que necesito usar e invocar para poder acceder algún formato de datos extranjero (no abierto, no documentado).Uso del Modelo de objetos componentes (COM) en plataformas que no son de Microsoft

La plataforma Microsoft Visual Studio tiene capacidades muy buenas para importar tales DLL COM y usarlos en mi proyecto (directiva #import de Visual C++, o seleccionarlos y agregarlos usando los diálogos de Visual Basic .NET) - y esa es la manera recomendada por los vendedores usalos, usalos a ellos.

Me interesaría encontrar una forma de utilizar 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 el controlador this, 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?

Respuesta

22

Respondiendo a mí mismo, pero me las arreglé para encontrar la biblioteca perfecta para OLE/COM llamando 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 idioma con enlaces C también). Utiliza un printf/scanf-like format string syntax.
(Usted pasa lo que quiera siempre y cuando 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 compilarlo también en 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/su propio VARIANT).

Mi versión parcheada y parches están disponibles como un tenedor en github:

Y aquí están mis parches:

+3

¿Se pregunta si sus parches están disponibles para su descarga en algún lugar? – ezpresso

+1

@ezpresso: la versión parchada de DispPatch se perdió inicialmente en el repositorio del proyecto principal (https://code.google.com/p/captain-bol/) He hecho un fork con mi parche en github: https://github.com/DrYak/disphelper – DrYak

0

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

5

El problema con el Visor de Objetos Ole/Com empaquetado con Visual Studio y Windows SDKs es que produce un .IDL roto del .DLL, que MIDL no puede compilar aún más en un .H/.CPP par.

La nueva implementación de OleViewer del vino es actualmente inestable y se bloquea al intentar utilizar esas bibliotecas.

Cuestiones relacionadas