2015-01-15 56 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時,有相當多的點擊量。

我上面提出的改變應該有希望證實或否定這種可能性,但至少它們將有助於確定問題的範圍。