2009-08-14 63 views
5

當我有IDL的片段看起來像這樣的改變標識的情況下:MIDL編譯IDL文件

[ object, uuid(...), pointer_default(unique) ] 
interface IVirtualMachine { /* ... */ } 

[ object, uuid(...), pointer_default(unique) ] 
interface IVirtualServer : IUnknown 
{ 
    HRESULT FindVirtualMachine(
     [in] BSTR configurationName, 
     [out,retval] IVirtualMachine **virtualMachine); 
}; 

[ uuid(...), version(1.0) ] 
library VirtualServerLib 
{ 
    [ uuid(...) ] 
    coclass VirtualServer 
    { 
     [default] interface IVirtualServer; 
    }; 

    [ uuid(...) ] 
    coclass VirtualMachine 
    { 
     [default] interface IVirtualMachine; 
    }; 
}; 

...當我用MIDL編譯它,然後查看生成的類型庫, (大寫字母V)變成virtualMachine(小寫字母V)。

例如,如果我打電話給我的coclass XirtualMachine,那就很好。

到底是什麼?

回答

6

這是MIDL的一個可怕的bug /功能。它不允許相同的標識符出現在不同的外殼中,因此它會在第一次看到外殼時從外殼中替換所有隨後的單詞。

查看KB220137

+1

查找相關知識庫:很好。 – 2010-04-21 06:12:01

0

好的。解決了它。正是這條線的位置:

[out,retval] IVirtualMachine **virtualMachine); 

如果我將其更改爲:

[out,retval] IVirtualMachine **ppVirtualMachine); 

...然後正常工作。我猜,MIDL有點麻煩。也許它試圖做類似VB的案例改正。