2015-01-15 22 views
4

我有一个简单的IDL文件,其中只包含一个enum。其中一个标识是cyMIDL编译错误:使用“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: expecting an identifier near "cy"

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

有什么想法可能是这里的问题?

+0

您不能在库{}块中放置枚举。把它移到它外面。 –

回答

3

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

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

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

但我的代码中的枚举是在不同的库(MyLib)中。那么为什么它应该和Wtypes.h中的那些人冲突? – athena

0

第一一步是调查是否有问题专门cy还是它的东西。

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

另一种可能性是交换abccy行以查看错误是否跟在cy之后。你可能要考虑

一两件事,对似乎表明cy被混淆为currency数据类型,这样可以问题网搜索midl cy时,有相当多的点击量。

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