MIDL(常量)参考

发布于 2024-09-05 00:17:01 字数 235 浏览 6 评论 0原文

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

例如。

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

为了

HRESULT MyMethod(
    IID const &rclsid
);

Are there no constant references in MIDL method declarations????

eg.

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

for

HRESULT MyMethod(
    IID const &rclsid
);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送你一个梦 2024-09-12 00:17:01

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

此外,如果您查看 REFGUID 的定义,您会发现“& const”和“const &”之间的区别。他们只对 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

MIDL doesn't really support reference parameters, it only supports "in" and "out" parameters. So if you DO pass in a reference, it's just syntactic sugar for a pointer to the value (the issue is observability - if you have a callback function or interface in our method signature, changes to a reference would be observable from the callback, but changes to an [out] parameter aren't visible until the function returns.

In addition, the difference between "& const" and "const &" are lost. If you look at the definition of REFGUID, you'll see that they only use one form of "const" for C++ code:

#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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文