一般来说,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;
Run Code Online (Sandbox Code Playgroud)
请注意,每个方法都有一个 THIS 指针作为第一个参数,并且您将需要定义更多类型,例如 ITypeInfo、REFIID、DISPID 等。
所以,这是一项艰巨的任务。但可以用纯 C 创建 C++ 接口。