我被告知每个可从C ++代码调用的COM方法(例如IHTMLDocument2::write
)都有一个等效的C声明,可以从C代码中使用...
我如何找到它?
提前致谢!
答案 0 :(得分:1)
类型R Interface::Foo(T1, ..., Tn)
的方法调用只需转换为R Foo(Interface*, T1, ..., Tn)
。
在编译为C时可用,即未定义__cplusplus
或定义CINTERFACE
。
答案 1 :(得分:1)
此特定界面记录为由<mshtml.h>
提供。现在,正如它发生的那样,该文件的第二行和第三行是:
// Include the full header file that works for C
#include "mshtmlc.h"
查看该文件,我们找到声明
/* [id][vararg] */ HRESULT ( STDMETHODCALLTYPE *write )(
IHTMLDocument2 * This,
/* [in] */ __RPC__in SAFEARRAY * psarray);
请注意,这实际上是IHTMLDocument2::write
方法的指针。
有时C声明是相同的标题;有时声明不公开。但是COM标准是一个ABI(一个二进制接口),它设计成你总是可以写一个C声明。可能会很痛苦。