MIDL在编译IDL文件时更改标识符的大小写

时间:2009-08-14 14:26:13

标签: 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编译它然后查看生成的类型库时,VirtualMachine(大写V)已经变成virtualMachine(小写V)。

例如,如果我打电话给我的coclass XirtualMachine,那就好了。

到底是什么?

2 个答案:

答案 0 :(得分:6)

这是MIDL的一个可怕的错误/功能。它不允许相同的标识符出现在不同的外壳中,因此它从第一次看到时就用一个外壳替换了一个单词的所有后续实例。

请参阅KB220137

答案 1 :(得分:0)

行。解决了这个问题。这是这一行:

[out,retval] IVirtualMachine **virtualMachine);

如果我将其更改为:

[out,retval] IVirtualMachine **ppVirtualMachine);

...然后它运作正常。我想,MIDL中有些东西搞砸了。也许它正在尝试进行类似VB的情况修正。