C ++ Win32 - COM-метод: эквивалентное объявление C - PullRequest
0 голосов
/ 26 октября 2009

Мне сказали, что каждый COM-метод, вызываемый из кода C ++ (например, IHTMLDocument2::write), имеет эквивалентное объявление C, используемое из кода C ...

Как мне найти это?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 26 октября 2009

Этот конкретный интерфейс задокументирован как предоставляемый <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. Хотя может быть больно.

1 голос
/ 26 октября 2009

вызовы методов типа R Interface::Foo(T1, ..., Tn) просто переводятся в R Foo(Interface*, T1, ..., Tn).

Они доступны при компиляции как C, то есть __cplusplus не определено или CINTERFACE определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...