5

我有一个看起来像这样的 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)。

XirtualMachine例如,如果我打电话给我的 coclass ,一切都很好。

我勒个去?

4

2 回答 2

6

这是 MIDL 的一个可怕的错误/功能。它不允许相同的标识符以不同的大小写出现,因此它会用第一次看到的大小写替换单词的所有后续实例。

请参阅KB220137

于 2010-04-20T23:14:14.630 回答
0

好的。解决了。这是这条线:

[out,retval] IVirtualMachine **virtualMachine);

如果我将其更改为:

[out,retval] IVirtualMachine **ppVirtualMachine);

...然后它工作正常。我猜在 MIDL 中有些古怪。也许它正在尝试进行类似 VB 的大小写校正。

于 2009-08-14T14:32:34.070 回答