Frage

Ich brauche einen Code von mir mit dem gcc-Compiler in den R-Tools (R das statistische Programm für Windows), das Problem einbezogen zu kompilieren ist, dass ich IDispatch in meinem Code verwenden müssen eine Zugriffs die Methoden eines COM zu erstellen Objekt und die gcc-Compiler nicht viel von dem Code nicht unterstützt, die ich verwende, dies zu tun, die im Grunde C ++ Code.

Also meine Frage ist, wie kann ich IDispatch in C verwenden das COM-Objekt zu erstellen, ohne auf MFC abhängig zu sein, .NET, C #, WTL oder ATL. Ich glaube, wenn ich tue, damit ich in der Lage sein, meinen Code ohne Probleme zu kompilieren.

War es hilfreich?

Lösung

Es gibt einen großen Artikel über Codeproject dem Titel "COM einfach in C".

Hier ist Link zu Teil 1 .

Es gibt viele sehr gute Informationen über die Arbeit mit COM in C in diesem Artikel und die nachfolgenden Autoren Follow-ups (ich glaube, es gibt 3 oder 4 in der Serie).

Bearbeiten
Ich war falsch, es gibt 8 Teile!

Teil 2
Teil 3
Teil 4
Teil 5
Teil 6
Teil 7
Teil 8

Andere Tipps

Im Allgemeinen ist eine C ++ Schnittstelle IDispatch ist nur eine Tabelle von Funktionszeigern. In C, würde es in etwa so aussehen:

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;

Beachten Sie, dass jede Methode einen diesen Zeiger als ersten Parameter hat, und dass Sie brauchen, um mehr Arten, wie ITypeInfo, REFIID, DISPID, etc, etc zu definieren.

Also, es ist eine große Aufgabe. Aber es ist möglich, C ++ Schnittstellen in reinem C zu erstellen.

Sie können auch benutzen disphelper Bibliothek.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top