MIDL编译错误:enum with“cy”

时间:2015-01-15 04:03:15

标签: c++ idl midl

我有一个简单的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已经在某个地方使用过或者是一种类型 - 但事实并非如此。

关于这可能是什么问题的任何想法?

2 个答案:

答案 0 :(得分:3)

基于一些实验,似乎编译器拒绝来自WTypes.h的不区分大小写的名称。

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

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

答案 1 :(得分:0)

第一个步骤是调查带有cy具体问题,或者是否是其他问题。

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

另一种可能性是围绕abccy行进行交换,以查看错误是否在cy之后。

您可能需要考虑的一件事是,在网上搜索midl cy时会发现很多点击,似乎建议cy别名为currency数据类型,以便可能是一个问题。

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