2009-08-14 109 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的案例改正。