MIDL cambia el caso de identificador de biblioteca de tipos generada

Seleccione idioma Seleccione idioma
Id. de artículo: 220137 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando hay dos identificadores se diferencien únicamente por las mayúsculas o minúsculas, el caso de identificador de la segundo se cambia para reflejar el caso de la primera.

Causa

La biblioteca IDL y escribir no distinguen mayúsculas de minúsculas por diseño. El código de automatización OLE que se llamó a MIDL para generar la biblioteca de tipo está realizando la primera aparición de un nombre y las repeticiones subsiguientes del mismo nombre en el archivo IDL, incluso si está en contexto diferente, para que sea el mismo.

Solución

Soluciones provisionales que se puede utilizar para evitar este problema son:
  • En el caso de importar un archivo IDL a otro, la posibilidad de que esto ocurra es superior. En lugar de importar archivos IDL en otro IDL, importar una biblioteca de tipo correspondiente.
  • Asegúrese de que el mismo nombre no está ya presente en el archivo IDL cuando introduce un nuevo identificador.
  • Asignar el identificador generado en la biblioteca de tipo con la documentación de componentes. Esto realmente no es demasiado difícil ya que serán los identificadores que se diferencien únicamente por las mayúsculas o minúsculas en un contexto diferente que es un método en una y otra un parámetro, la estructura y así sucesivamente. Esto ayudará a evitar la discrepancia en la documentación del componente.

Estado

Este comportamiento es por diseño.

Más información

Si tiene un archivo IDL dos diferentes identificadores con el mismo nombre pero sólo se diferencian en el caso, biblioteca de tipos generado de la MIDL cambiará el segundo identificador para el mismo caso que el primero.

Pasos para reproducir este comportamiento

  1. Crear un archivo IDL (name.idl). Vea el ejemplo siguiente:
    // Test program to demonstrate capitalization bugs in MIDL 5.02.0235
    import "oaidl.idl";
    import "ocidl.idl";
    
       [
          uuid(DB9DDB0D-8834-11D1-8278-00A024A41CC8),
          dual,
          oleautomation,
       ]
       interface Interface1 : IDispatch {
          [ id(4), helpstring("") ]
          HRESULT OtherMethod (
             // This parm name will affect the case of the subsequent method name.
             [in] VARIANT_BOOL mYnAme );
       };
    
    
       [
          uuid(DB9DDB0C-8834-11D1-8278-00A024A41CC8),
          dual,
          oleautomation,
       ]
       interface Interface2 : IDispatch {
          [ id(5), helpstring("") ]
          // The method name gets changed.
          HRESULT MyName ();
       };
    
    
    [  uuid(2A216780-BC52-11D2-B94F-00C04F81B63A), version(1.0),
    ]
    library MIDLTST
    {
       importlib("stdole32.tlb");
    
       [
          uuid(65B5C950-883D-11D1-8278-00A024A41CC8),
          helpstring("Exercise various supported types.")
       ]
       coclass MIDLTest {
          [default] interface Interface1;
          interface Interface2;
       };
    };
    						
  2. Utilice el compilador MIDL para generar biblioteca de tipos. Utilice el name.idl de comandos MIDL
  3. Abra la biblioteca de tipo generado en OLEVIEW. Consulte lo siguiente salida OLEVIEW.
    // Generated .IDL file (by the OLE/COM Object Viewer)
    // 
    // typelib filename: <could not determine filename>
    
    [
      uuid(2A216780-BC52-11D2-B94F-00C04F81B63A),
      version(1.0)
    ]
    library MIDLTST
    {
        // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
        importlib("STDOLE2.TLB");
    
        // Forward declare all types defined in this typelib
        interface Interface1;
        interface Interface2;
    
        [
          uuid(65B5C950-883D-11D1-8278-00A024A41CC8),
          helpstring("Exercise various supported types.")
        ]
        coclass MIDLTest {
            [default] interface Interface1;
            interface Interface2;
        };
    
        [
          odl,
          uuid(DB9DDB0D-8834-11D1-8278-00A024A41CC8),
          dual,
          oleautomation
        ]
        interface Interface1 : IDispatch {
            [id(0x00000004)]
            HRESULT OtherMethod([in] VARIANT_BOOL mYnAme);
        };
    
        [
          odl,
          uuid(DB9DDB0C-8834-11D1-8278-00A024A41CC8),
          dual,
          oleautomation
        ]
        interface Interface2 : IDispatch {
            [id(0x00000005)]
            HRESULT mYnAme();
        };
    };
    
    						
  4. Aquí se ha cambiado el nombre de método minombre en Interfaz2 para minombre.

Propiedades

Id. de artículo: 220137 - Última revisión: viernes, 29 de septiembre de 2006 - Versión: 2.3
La información de este artículo se refiere a:
  • Microsoft Platform Software Development Kit-January 2000 Edition sobre las siguientes plataformas
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows NT Workstation 4.0 Developer Edition
Palabras clave: 
kbmt kbbug kbpending KB220137 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 220137

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com