COMオブジェクトを呼び出すために、プレーンなCでのIDispatchを使用する方法

StackOverflow https://stackoverflow.com/questions/946114

質問

私はRツール(R Windows用の統計プログラム)に含まれ、GCCコンパイラを使用して私のいくつかのコードをコンパイルする必要があり、

、問題は、私は方法COMのアクセスを作成するために、自分のコードでのIDispatchを使用する必要があるということですオブジェクト、およびGCCコンパイラは、基本的には、C ++のコードである、私はそうするために使用しているコードの多くをサポートしていません。

だから私の質問は、私はMFC、.NET、C#の、WTL、またはATLに依存することなく、COMオブジェクトを作成するために、C言語でのIDispatchを使用する方法です。私はそうするならば、私は何の問題もなく私のコードをコンパイルすることができると信じています。

他のヒント

一般的に、C ++ IDispatchインタフェースは、関数ポインタのテーブルだけです。 Cでは、それは次のようになります:

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;

すべてのメソッドは、最初のパラメータとしてこのポインタを持っている、とあなたは、このような等等のITypeInfo、REFIID、DISPID、など多くの種類を定義する必要があることに注意してください。

だから、その大きな課題。しかし、純粋なCでC ++インターフェイスを作成することが可能である。

また、あなたは disphelper のライブラリを使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top