MIDL ändert die Groß-/Kleinschreibung Bezeichner in der generierten Typ Bibliothek

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 220137 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn es zwei Bezeichner, die sich nur durch Groß-/Kleinschreibung unterscheiden sind, ist der Fall der zweite Bezeichner geändert, um bei der ersten widerzuspiegeln.

Ursache

IDL- und -eingeben-Bibliothek wird die Groß-/ Kleinschreibung nicht beabsichtigt beachtet. Der OLE-Automatisierung Code, der von MIDL zum Generieren der Bibliothek Typ aufgerufen wird dauert das erste Auftreten eines Namens und alle nachfolgenden Vorkommen desselben Namens in der IDL auch wenn es in anderen Kontext identisch ist.

Lösung

Im folgenden werden Problemumgehungen, die Sie verwenden können, um dieses Problem zu vermeiden:
  • Im Fall von einer IDL-Datei in ein anderes importieren, ist die Möglichkeit diese geschieht höher. Anstelle von IDL-Dateien in einem anderen IDL importieren, importieren Sie einen entsprechenden Typ Bibliothek.
  • Stellen Sie sicher, dass der gleiche Namen nicht bereits in der IDL-Datei vorhanden beim Einführen eines neuen Bezeichner ist.
  • Ordnen Sie den Bezeichner in der Bibliothek Typ in der Dokumentation Komponenten generiert. Dies ist eigentlich nicht zu schwierig, da alle Bezeichner, die sich nur durch Groß-/Kleinschreibung unterscheiden werden in einem anderen Kontext, der ist, eine Methode und einen Parameter, Struktur und So weiter. Dies hilft um Abweichung in der Dokumentation der Komponente zu vermeiden.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Wenn eine IDL-Datei zwei verschiedene hat Bezeichner mit dem gleichen Namen aber unterscheiden sich nur in der Fall, dann die MIDL-generierten Typbibliothek wird den zweiten Bezeichner in der gleichen Fall wie die erste geändert.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie eine IDL-Datei (name.idl). Finden Sie im folgenden Beispiel:
    // 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. Verwenden Sie MIDL-Compiler, um Typbibliothek zu generieren. Verwenden Sie den Befehl MIDL-name.idl
  3. Öffnen Sie den generierten Typ Bibliothek in OLEVIEW. Im folgenden finden Sie OLEVIEW-Ausgabe.
    // 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. Hier wurde der Methodenname MyName in Interface2 zu meinname geändert.

Eigenschaften

Artikel-ID: 220137 - Geändert am: Freitag, 29. September 2006 - Version: 2.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Platform Software Development Kit January 2000 Edition, wenn verwendet mit:
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows NT Workstation 4.0 Developer Edition
Keywords: 
kbmt kbbug kbpending KB220137 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 220137
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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