2009-08-14 14 views
5

J'ai un extrait de IDL qui ressemble à ceci:MIDL change cas d'identification lors de la compilation fichier 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; 
    }; 
}; 

... quand je compile avec MIDL puis regardez dans la bibliothèque de type généré, VirtualMachine (V majuscule) a été transformé en virtualMachine (V minuscule).

Si j'appelle ma coclass XirtualMachine, par exemple, tout va bien.

Que diable?

Répondre

6

Ceci est un bug terrible/fonctionnalité de MIDL. Il ne permet pas au même identifiant d'apparaître avec un boîtier différent, de sorte qu'il remplace toutes les instances suivantes d'un mot par le boîtier à partir de la première fois qu'il a été vu.

Voir le KB220137

+1

Trouver le bon KB: bon point. –

0

OK. Travaillé dehors. Ce fut cette ligne ici:

[out,retval] IVirtualMachine **virtualMachine); 

Si je change à:

[out,retval] IVirtualMachine **ppVirtualMachine); 

... il fonctionne très bien. Quelque chose de vicieux à MIDL, je suppose. Peut-être qu'il essaie de faire une correction de cas similaire à VB.