我需要使用包括在R工具gcc编译(R为窗口中的统计程序)来编译我的一些代码,问题是,我需要使用的IDispatch在我的代码来创建的访问的COM的方法对象,并在gcc编译器不支持多,我使用这样做的代码,这基本上是C ++的代码。

所以我的问题是如何可以使用的IDispatch用C,而不必依赖于MFC,.NET,C#,WTL,或ATL创建COM对象。我相信,如果我这样做,我将能够编译我的代码没有任何问题。

有帮助吗?

解决方案

有是题为 “COM以纯C” 在CodeProject一个伟大的文章。

下面是链接第1部分

有是该文章中与COM工作在C很多非常好的信息和作者的后续跟进(我认为有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