如何使用IDispatch接口在普通的C调用COM对象
题
我需要使用包括在R工具gcc编译(R为窗口中的统计程序)来编译我的一些代码,问题是,我需要使用的IDispatch在我的代码来创建的访问的COM的方法对象,并在gcc编译器不支持多,我使用这样做的代码,这基本上是C ++的代码。
所以我的问题是如何可以使用的IDispatch用C,而不必依赖于MFC,.NET,C#,WTL,或ATL创建COM对象。我相信,如果我这样做,我将能够编译我的代码没有任何问题。
其他提示
在一般情况下,一个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