문제

R 도구에 포함 된 GCC 컴파일러 (Windows 용 통계 프로그램)를 사용하여 광산 코드를 컴파일해야합니다. 문제는 COM 객체의 메소드에 액세스하기 위해 내 코드에서 IDISPATCH를 사용해야한다는 것입니다. GCC 컴파일러는 기본적으로 C ++ 코드 인 코드를 많이 지원하지 않습니다.

따라서 내 질문은 C에서 idispatch를 사용하여 MFC, .NET, C#, WTL 또는 ATL에 의존하지 않고도 COM 객체를 만들 수있는 방법입니다. 그렇게하면 아무런 문제없이 코드를 컴파일 할 수 있다고 생각합니다.

도움이 되었습니까?

해결책

CodeProject에는 "Com in Plain C"라는 훌륭한 기사가 있습니다.

여기에 있습니다 Part 1에 대한 링크.

해당 기사에서 C에서 COM 작업과 저자의 후속 후속 조치에 대한 정보가 많이 있습니다 (시리즈에 3 또는 4가 있다고 생각합니다).

편집하다:
나는 틀렸다. 8 개의 부분이있다!

2 부
파트 3
파트 4
파트 5
6 부
7 부
파트 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;

모든 메소드는이 포인터가 첫 번째 매개 변수로 사용되며 ItypeInfo, Refiid, Dispid 등과 같은 더 많은 유형을 정의해야합니다.

그래서 그것은 큰 일입니다. 그러나 순수한 C에서 C ++ 인터페이스를 만들 수 있습니다.

또한 사용할 수 있습니다 disphelper 도서관.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top