COM 개체를 호출하려면 일반 C에서 idispatch를 사용하는 방법
문제
R 도구에 포함 된 GCC 컴파일러 (Windows 용 통계 프로그램)를 사용하여 광산 코드를 컴파일해야합니다. 문제는 COM 객체의 메소드에 액세스하기 위해 내 코드에서 IDISPATCH를 사용해야한다는 것입니다. GCC 컴파일러는 기본적으로 C ++ 코드 인 코드를 많이 지원하지 않습니다.
따라서 내 질문은 C에서 idispatch를 사용하여 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