MIDL (постоянные) ссылки - PullRequest
2 голосов
/ 12 июня 2010

Нет ли постоянных ссылок в объявлениях методов MIDL ????

например.

[id(1), helpstring("My Method")]
HRESULT MyMethod(
    [in] IID & const rclsid
);

для

HRESULT MyMethod(
    IID const &rclsid
);

1 Ответ

3 голосов
/ 12 июня 2010

MIDL на самом деле не поддерживает опорные параметры, он поддерживает только параметры "in" и "out". Поэтому, если вы действительно передадите ссылку, это просто синтаксический сахар для указателя на значение (проблема заключается в наблюдаемости - если у вас есть функция обратного вызова или интерфейс в сигнатуре нашего метода, изменения в ссылке можно будет наблюдать из обратного вызова, но изменения параметра [out] не видны, пока функция не вернется.

Кроме того, разница между «& const» и «const &» теряется. Если вы посмотрите на определение REFGUID, вы увидите, что они используют только одну форму «const» для кода C ++:

#ifdef __midl_proxy
#define __MIDL_CONST
#else
#define __MIDL_CONST const
#endif

#ifndef _REFGUID_DEFINED
#define _REFGUID_DEFINED
#ifdef __cplusplus
#define REFGUID const GUID &
#else
#define REFGUID const GUID * __MIDL_CONST
#endif
#endif
...