2009-08-14 9 views
5

Tengo un fragmento de IDL que tiene este aspecto:de MIDL cambia caso de identificador al compilar archivo 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; 
    }; 
}; 

... cuando compilo con de MIDL y luego buscar en la biblioteca de tipos generada, VirtualMachine (mayúscula V) se ha convertido en virtualMachine (minúscula V).

Si llamo a mi coclass XirtualMachine, por ejemplo, todo está bien.

¿Qué demonios?

Respuesta

6

Este es un error/característica terrible de MIDL. No permite que aparezca el mismo identificador con una carcasa diferente, por lo que reemplaza todas las instancias posteriores de una palabra con la carcasa desde la primera vez que se vio.

Véase el KB220137

+1

Encontrar el KB relevante: buen lugar. –

0

OK. Lo resolvió Fue esta línea aquí:

[out,retval] IVirtualMachine **virtualMachine); 

Si lo cambio a:

[out,retval] IVirtualMachine **ppVirtualMachine); 

... entonces funciona bien. Algo complicado en MIDL, supongo. Tal vez está tratando de hacer una corrección de caso tipo VB.

Cuestiones relacionadas