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) が (小文字の V) に変わっていvirtualMachineます。

たとえば、自分の coclass を呼び出すと、XirtualMachineすべて問題ありません。

なんてこったい?

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 に答える