【问题标题】:MIDL compile error: enum with "cy"MIDL 编译错误:带有“cy”的枚举
【发布时间】:2015-03-13 10:40:16
【问题描述】:

我有一个简单的 IDL 文件,它只包含一个 enum。标识符之一是cy。

[
  uuid(2642345F-F2AB-3600-8926-26E823800902),
  version(1.0),
]

library MyLib
{
    typedef[ uuid(a0b0aa7b-345f-4b3a-b88f-d6cdd048e205) ]
    enum Codes
    {
       cy, 
       abc
    } Codes;
};

但是,MIDL 不会编译它并给我一个错误,例如:

MIDL2025:期待“cy”附近的标识符

我的第一个猜测是 cy 是 MIDL 中的关键字/保留词——但事实并非如此。
我的第二个猜测是cy 已经在某处使用过或者是一种类型——但事实并非如此。

您知道这里可能存在什么问题吗?

【问题讨论】:

  • 您不能将枚举放入 library {} 块中。只需将其移出即可。

标签: c++ idl midl


【解决方案1】:

根据一些实验,编译器似乎拒绝了 WTypes.h 中不区分大小写的名称。

例如,它也会拒绝这些名字:

byte_blob
bstr
clipdata
decimal
userbitmap
userhbitmap
remhglobal
statflag
...etc...

【讨论】:

  • 但我代码中的枚举位于不同的库 (MyLib) 中。那么为什么要和 Wtypes.h 中的冲突呢?
【解决方案2】:

第一步是调查cy是否是特别的问题,还是其他问题。

首先,我将其更改为cyxyzzy 或zx,看看它是否仍然抱怨。如果是这样,则名称的 结构 可能有问题(例如全部小写)。如果不是,则可能与特定的 cy 标识符有关。

另一种可能性是交换abc 和cy 行以查看错误是否跟随cy。

您可能需要考虑一件事,在网上搜索 midl cy 时,有很多点击似乎表明 cy 被别名为 currency 数据类型,因此可能 em> 是个问题。

我上面建议的更改应该有望确认或否认这种可能性,但至少,它们将有助于确定问题的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多