C ++ Win32 - COM方法:等效的C声明

时间:2009-10-26 13:24:30

标签: c++ c winapi

我被告知每个可从C ++代码调用的COM方法(例如IHTMLDocument2::write)都有一个等效的C声明,可以从C代码中使用...

我如何找到它?

提前致谢!

2 个答案:

答案 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声明。可能会很痛苦。