Question

Je dois compiler un code de la mine en utilisant le compilateur gcc inclus dans les outils de R (R le programme statistique pour les fenêtres), le problème est que je dois utiliser IDispatch dans mon code pour créer un accès aux méthodes d'une COM objet, et le compilateur gcc ne prend pas en charge une grande partie du code que je me sers de le faire, ce qui est essentiellement le code C ++.

Alors, ma question est de savoir comment puis-je utiliser IDispatch en C pour créer l'objet COM sans avoir à dépendre de MFC, .NET, C #, WTL ou ATL. Je crois que si je fais donc je serai en mesure de compiler mon code sans aucun problème.

Était-ce utile?

La solution

Il y a un grand article sur CodeProject intitulé "COM dans la plaine C".

Voici le lien à la partie 1 .

Il y a beaucoup de très bonnes informations sur le travail avec COM en C dans cet article et des suivis ultérieurs de l'auteur (je pense qu'il ya 3 ou 4 dans la série).

Edit: Je me suis trompé, il y a 8 parties!

Partie 2
Partie 3
Partie 4
Partie 5
Partie 6
Partie 7
Partie 8

Autres conseils

En général, une interface C ++ IDispatch est juste une table de pointeurs de fonction. En C, il ressemblerait à quelque chose comme:

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;

Notez que chaque méthode a ce pointeur comme premier paramètre, et que vous devrez définir plusieurs types, tels que ITypeInfo, REFIID, DISPID, etc, etc.

Alors, son une grande tâche. Mais il est possible de créer des interfaces C de C dans le plus pur.

Vous pouvez également utiliser disphelper bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top