Как использовать IDispatch в обычном C для вызова COM-объекта
Мне нужно скомпилировать некоторый мой код, используя компилятор gcc, включенный в R tools (R статистическая программа для windows), проблема в том, что мне нужно использовать IDispatch в моем коде для создания доступа к методам COM-объекта, и компилятор gcc не поддерживает большую часть кода, который я использую для этого, который в основном является кодом C++.
Так мой вопрос как я могу использовать IDispatch в C, чтобы создать COM-объект с МФЦ, .Чистая, с#, ВТО, или ATL. Я считаю, что если я это сделаю, я смогу скомпилировать мой код без каких либо проблем.
3 ответов
есть отличная статья о CodeProject под названием "COM in plain C".
здесь ссылка на Часть 1.
в этой статье есть много очень хорошей информации о работе с COM в C и последующих последующих действиях автора (Я думаю, что в серии есть 3 или 4).
Edit:
Я ошибся, есть 8 частей!
В общем, интерфейс 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;
обратите внимание, что каждый метод имеет указатель THIS в качестве первого параметра и что вам нужно будет определить больше типов, таких как ITypeInfo, REFIID, DISPID и т. д.
Итак, это большая задача. Но можно создать интерфейсы C++ в чистом C.