MIDL(常量)参考

时间:2010-06-12 08:55:18

标签: windows com midl

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

例如

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

HRESULT MyMethod(
    IID const &rclsid
);

1 个答案:

答案 0 :(得分: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