2

MIDL 方法声明中没有常量引用吗???

例如。

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

为了

HRESULT MyMethod(
    IID const &rclsid
);
4

1 回答 1

3

MIDL 并不真正支持引用参数,它只支持“in”和“out”参数。因此,如果您确实传递了一个引用,它只是指向该值的指针的语法糖(问题是可观察性 - 如果您在我们的方法签名中有回调函数或接口,则可以从回调中观察到对引用的更改,但是在函数返回之前,对 [out] 参数的更改不可见。

此外,丢失了“& const”和“const &”之间的区别。如果您查看 REFGUID 的定义,您会发现它们仅对 C++ 代码使用一种形式的“const”:

#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
于 2010-06-12T13:42:32.430 回答