Pregunta

necesito para compilar un código de la mina usando el compilador gcc incluye en las herramientas de I (R programa estadístico para las ventanas), el problema es que necesito utilizar IDispatch en mi código para crear un acceso a los métodos de un COM objeto, y el compilador gcc no soporta gran parte del código que estoy usando para ello, que es básicamente el código C ++.

Así que mi pregunta es ¿cómo puedo usar IDispatch en C para crear el objeto COM sin tener que depender de MFC, .NET, C #, WTL, o ATL. Creo que si lo hago voy a ser capaz de compilar mi código sin ningún problema.

¿Fue útil?

Solución

Hay un gran artículo sobre CodeProject titulado "COM en C plano".

Aquí es el enlace a la Parte 1 .

Hay un montón de muy buena información sobre cómo trabajar con COM en C en ese artículo y del autor seguimientos posteriores (creo que hay 3 o 4 de la serie).

Editar
Estaba equivocado, hay 8 partes!

Parte 2
Parte 3
Parte 4
Parte 5
Parte 6
Parte 7
parte 8

Otros consejos

En general, una interfaz de C ++ IDispatch es sólo una tabla de punteros de función. En C, se vería algo como:

typedef struct {
  HRESULT(*pQueryInterface)(void* this, REFIID riid, void **ppvObject);
  ULONG(*pAddRef)(void* this);
  ULONG(*pRelease)(void* this);
  HRESULT(*pGetTypeInfoCount)(void* this, unsigned int* pctInfo);
  HRESULT(*pGetTypeInfo)(void* this, unsigned int iTInfo,LCID lcid, ITypeInfo** ppTInfo);
  HRESULT(*pGetIDsOfNames)(void* this, REFIID riid, OLECHAR** rgszNames, unsigned int cNames, LCID lcid, DISPID* rgDispId);
 HRESULT(*pInvoke)(void* this, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,DISPPARAMS* pDispParams, VARIANT* pVarResult, EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
} IDispatch_in_C;

Tenga en cuenta que cada método tiene un este puntero como primer parámetro, y que tendrá que definir más tipos, tales como ITypeInfo, REFIID, DISPID, etc, etc.

Por lo tanto, es una gran tarea. Sin embargo, es posible crear interfaces de C ++ en C puro.

También se puede usar disphelper biblioteca.

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