COMオブジェクトを呼び出すために、プレーンなCでのIDispatchを使用する方法
質問
私は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 のライブラリを使用することができます。
所属していません StackOverflow