Domanda

Ho bisogno di compilare un codice di mine con il compilatore gcc incluso negli strumenti di R (R il programma statistico per le finestre), il problema è che ho bisogno di usare IDispatch nel mio codice per creare un accesso ai metodi di una COM oggetto, e il compilatore gcc non supporta gran parte del codice che sto usando per farlo, che è fondamentalmente codice C ++.

Quindi la mia domanda è come posso utilizzare IDispatch in C per creare l'oggetto COM, senza dover dipendere da MFC, .NET, C #, WTL o ATL. Credo che se lo faccio io sarò in grado di compilare il mio codice senza alcun problema.

È stato utile?

Soluzione

C'è un grande articolo su CodeProject intitolato "COM in C puro".

Ecco il link alla Parte 1 .

Ci sono un sacco di ottime informazioni su come lavorare con COM in C in tale articolo e dell'autore successivi follow-up (penso che ci sono 3 o 4 della serie).

Modifica
Ho sbagliato, ci sono 8 parti!

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

Altri suggerimenti

In generale, un'interfaccia C ++ IDispatch è solo una tabella di puntatori a funzione. In C, sarebbe simile a:

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;

Si noti che ogni metodo ha un questo puntatore come primo parametro, e che sarà necessario definire più tipi, come ad esempio ITypeInfo, REFIID, DISPID, ecc, ecc.

Quindi, è un grande compito. Ma è possibile creare interfacce C ++ in puro C.

Inoltre è possibile utilizzare disphelper biblioteca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top