【问题标题】:MIDL (Constant) ReferencesMIDL(常量)参考
【发布时间】:2010-06-12 21:42:32
【问题描述】:

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

例如。

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

HRESULT MyMethod(
    IID const &rclsid
);

【问题讨论】:

  • d3d11.idl 使用 REFGUID :/ 我不知道这个 o~o 感觉如何,我猜是因为它有效;问题仍然存在,因为如果你不能,我什至看不到 REFGUID 是如何可能的,但我似乎找不到也找不到例子......
  • 保罗改变了什么?我是否使用了 is 而不是 are ???我有时会这样做......

标签: windows com midl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多