如何为 VARIANT_BOOL 指定默认值?

发布于 2024-12-06 03:58:57 字数 402 浏览 2 评论 0原文

MS IDL 有用于指定默认值的语法对于参数。 我尝试为接受 VARIANT_BOOL 的函数指定默认值:

[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);

并收到以下错误消息:

错误 MIDL2035:需要常量表达式

bar 的默认值应为 VARIANT_TRUE 的正确语法是什么?

MS IDL has syntax for specifying a defaultvalue for parameters.
I tried to specify a default value for a function that accepts a VARIANT_BOOL:

[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);

And got the following error message:

error MIDL2035 : constant expression expected

What is the correct syntax for specifying that the default value of bar should be VARIANT_TRUE?

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

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

发布评论

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

评论(2

俯瞰星空 2024-12-13 03:58:57

VARIANT_TRUE 是在 WTypes.h 中定义的。您不能直接在 .idl 中使用它。常见的方法是直接使用该值,就像在 mshtml.idl 中所做的那样:

  [id(42)] HRESULT Foo([in, defaultvalue(-1)] VARIANT_BOOL bar);

或者如果您愿意,您可以将 #define 添加到 .idl 中,将其放在靠近顶部的位置:

#define VARIANT_TRUE -1
#define VARIANT_FALSE 0

VARIANT_TRUE is #defined in WTypes.h. You can't directly use it in your .idl. The common approach is to simply use the value directly, like it is done in mshtml.idl for example:

  [id(42)] HRESULT Foo([in, defaultvalue(-1)] VARIANT_BOOL bar);

Or you can add a #define to your .idl if you prefer, put it somewhere near the top:

#define VARIANT_TRUE -1
#define VARIANT_FALSE 0
剧终人散尽 2024-12-13 03:58:57

尽管不应该混淆 boolBOOLVARIANT_BOOL 看来在 idl 中 BOOL 被解释为VARIANT_BOOL 值。

[id(42)] HRESULT Foo([in, defaultvalue(TRUE)] VARIANT_BOOL bar);

当从 VBScript 调用且未指定任何参数时,它会以 -1 的形式到达 C++ 代码。

我不确定哪种方式更惯用 TRUE 或 @Hans 建议的 -1

Although one should not mix up bool, BOOL and VARIANT_BOOL it appears that in idl BOOL is interpreted as a VARIANT_BOOL value.

[id(42)] HRESULT Foo([in, defaultvalue(TRUE)] VARIANT_BOOL bar);

When called from VBScript with no parameter specified this reaches the C++ code as -1.

I'm not sure which way is more idiomatic TRUE or as @Hans suggested -1.

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