Freigeben über


eine #import-Direktive (C++)

C++-Besondere

Wird verwendet, um Informationen aus einer Typbibliothek enthält.Der Inhalt wird in der Typbibliothek C++-Klassen konvertiert und größtenteils beschreibt die COM-Schnittstellen.

#import "filename" [attributes]
#import <filename> [attributes]

Parameter

  • filename
    Gibt die zu importierenden Typbibliothek an.filename kann einen der folgenden Werte sein:

    • Der Name einer Datei, die eine Typbibliothek, z. B. ein .olb, .tlb enthält oder DLL-Datei.Das Schlüsselwort, Datei:, kann jedes Dateinamen stehen.

    • Die ProgID des Steuerelements in der Typbibliothek.Das Schlüsselwort, ProgID:, kann jedes ProgID stehen.Beispiele:

      #import "progid:my.prog.id.1.5"
      

      Weitere Informationen zu progids finden Sie unter Die Lokalisierungs-ID und die Versionsnummer angeben.

      Beachten Sie beim Kompilieren auf einem 64-Bit-Betriebssystem - Cross-Compiler mit einem vom Compiler als schreibgeschützt, die 32-Bit-Registrierungshive möglich ist.Sie sollten den systemeigenen 64-Bit-Compiler verwenden, um eine 64-Bit-Typbibliothek zu erstellen und zu registrieren.

    • Die Bibliothek ID der Typbibliothek.Das Schlüsselwort, libid:, kann jeder Bibliothek befinden.Beispiele:

      #import "libid:12341234-1234-1234-1234-123412341234" version("4.0") lcid("9")
      

      Wenn Sie keine Version oder lcid angeben, werden Regeln , die ProgID: angewendet werden, auch **libid:**angewendet.

    • Eine ausführbare Datei (.exe).

    • Eine Datei der Bibliothek (.dll), die eine Typbibliothek Ressource enthält (z. B. .ocx).

    • Ein Verbunddokument, das eine Typbibliothek enthält.

    • Ein beliebiges anderes Dateiformat, das vom LoadTypeLib API verstanden werden kann.

  • attributes
    Eine oder mehrere #import Attribute.Trennen Sie Attribute entweder mit einem Komma oder einem Leerzeichen.Beispiele:

    #import "..\drawctl\drawctl.tlb" no_namespace, raw_interfaces_only
    

    - oder -

    #import "..\drawctl\drawctl.tlb" no_namespace raw_interfaces_only
    

Hinweise

Dateinamen für Suchen-Reihenfolge

Dateiname wird optional von einer Spezifikation Verzeichnis vorangestellt.Der Dateiname muss eine vorhandene Datei benennen.Der Unterschied zwischen den zwei Formulare Syntax ist die Reihenfolge, in der der Präprozessor Typbibliothek für die Dateien gesucht wird, wenn der Pfad unvollständig angegeben wird.

Formular Syntax

Aktion

Form mit Anführungszeichen

Weist den Präprozessor an, die der Typbibliothek nach Dateien zunächst im Verzeichnis der Datei, die die #import-Anweisung enthält, und klicken Sie dann in den Verzeichnissen von zu suchen, welche Dateien, die diese Datei (#include) enthalten.Die Suche des Präprozessors dann an den Pfaden unten dargestellt.

Form der spitzen Klammer

Weist den Präprozessor an, das für Dateien Typbibliothek an den folgenden Pfaden zu suchen:

  1. Die Liste PATH Pfad Umgebungsvariablen

  2. Die Liste LIB Pfad Umgebungsvariablen

  3. Der Pfad, der von der Compileroption angegeben ist, /I (Additional Include Directories), außer es der Compiler sucht nach einer Typbibliothek, die von einer anderen Typbibliothek mit dem no_registry-Attribut verwiesen wurde.

Die Lokalisierungs-ID und die Versionsnummer angeben

Wenn Sie eine ProgID angeben, können Sie die lokalisierte ID und die Versionsnummer des Programm-ID.Beispiele:

#import "progid:my.prog.id" lcid("0") version("4.0)

Wenn Sie keine lokalisierte ID angeben, wird ein ProgID gemäß den folgenden Regeln ausgewählt:

  • Wenn nur eine lokalisierte ID vorhanden, diese wird verwendet.

  • Wenn es mehr als eine lokalisierte ID vorhanden sind, wird die erste Version 0, 9 oder 409 verwendet.

  • Wenn es mehr als eine lokalisierte ID vorhanden ist und keine von ihnen 0, 9 oder 409 sind, wird das letzte Verwendung.

  • Wenn Sie keine Versionsnummer angeben, wird die neueste Version verwendet.

Headerdateien wird durch Importieren

#import erstellt zwei Headerdateien, die den Inhalt der Typbibliothek in C++-Quellcode erneut erstellen.Die primäre Headerdatei entspricht der vergleichbar, die vom Compiler erzeugten Microsoft-Interface Definition Language (MIDL), jedoch mit zusätzlichem vom Compiler generierte Code und Daten.primäre Headerdatei hat denselben Basisnamen wie die Typbibliothek, sowie eine .TLH-Erweiterung.Die sekundäre Headerdatei besitzt denselben Basisnamen wie die Typbibliothek, mit einer .TLI-Erweiterung.Er enthält die Implementierungen für Memberfunktionen und vom Compiler generiert wird (#include) in der primären Headerdatei enthalten.

Wenn eine Eigenschaft Dispatchschnittstellen importiert, die byref Parameter verwendet, generiert #import nicht __declspec (Eigenschaft) - Anweisung für die Funktion.

Beide Headerdateien werden in das Ausgabeverzeichnis eingefügt, das durch die Option angegebene /Fo (Name objektdatei).Sie werden dann vom Compiler gelesen und kompiliert, als ob die primäre Headerdatei durch #include-Direktive benannt wurde.

Die folgenden Compileroptimierungen stammen mit den #import-Direktive:

  • Die Headerdatei, wenn sie erstellt wird, ist der gleiche wie Timestamps der Typbibliothek angegeben.

  • Wenn #import Verarbeitung die Überprüfung des Compilers das erste Mal, wenn der Header vorhanden ist und auf dem neuesten Stand ist.Wenn dies der Fall ist, muss er nicht neu erstellt werden.

Die #import-Direktive am minimalen Neuerstellung akzeptieren auch teil und können in eine vorkompilierte Headerdatei eingefügt werden.Weitere Informationen finden Sie unter Vorkompilierte Headerdateien erstellen .

8etzzkb6.collapse_all(de-de,VS.110).gifPrimäre Typbibliotheks-Headerdatei

Die primäre Typbibliothek headerdatei umfasst sieben Abschnitten:

  • Überschrifts vorformulierter festgelegt: Besteht Kommentaren, #include-Anweisung für COMDEF.H (das mehrere Standardwert von Makros definiert, die im Header verwendet werden) und aus verschiedenen anderen Setupinformationen.

  • Vorwärtsverweise und Typdefinitionen: Besteht aus Struktur Deklarationen wie struct IMyInterface und Typdefinitionen.

  • Deklarationen des intelligenten Zeiger: Die Vorlagenklasse _com_ptr_t ist eine Implementierung des intelligenten Zeiger, die Schnittstellenzeiger kapselt und beseitigt die Notwendigkeit, AddRef, Release, QueryInterface-Funktionen aufzurufen.Darüber hinaus wird es dem CoCreateInstance Aufruf aus, wenn es ein neues COM-Objekt erstellt.In diesem Abschnitt wird Makroanweisung _COM_SMARTPTR_TYPEDEF-Typdefinitionen von COM-Schnittstellen, um festzulegen spezialisierungen der Vorlagen _com_ptr_t Vorlagenklasse sein.Zum Beispiel für IMyInterfaceSchnittstelle enthält die TLH-Datei:

    _COM_SMARTPTR_TYPEDEF(IMyInterface, __uuidof(IMyInterface));
    

    welches der Compiler erweitert:

    typedef _com_ptr_t<_com_IIID<IMyInterface, __uuidof(IMyInterface)> > IMyInterfacePtr;
    

    Typ IMyInterfacePtr kann anstelle des unformatierten Schnittstellenzeiger IMyInterface*verwendet werden.Daher ist es nicht erforderlich, die verschiedenen IUnknown-Memberfunktionen aufrufen

  • Typeinfo-Deklarationen: Besteht hauptsächlich den Klassendefinitionen und andere Elemente, die die einzelnen Elemente typeinfo verfügbar machen, die durch ITypeLib: GetTypeInfozurückgegeben werden.In diesem Abschnitt wird jedes typeinfo aus der Typbibliothek im Header in einem Formular den Informationen abhängig TYPEKIND wiedergibt.

  • Optionale alte GUID-Definition: Enthält Initialisierungen der benannten GUID-Konstanten.Dies sind die Namen des Formulars CLSID_CoClass und IID_Interface, vergleichbar mit denen, die vom MIDL-Compiler generiert werden.

  • #include-Anweisung für den sekundären Header der Typbibliothek.

  • Fußzeilen vorformulierter festgelegt: Schließt nur #pragma pack(pop)ein.

Alle Abschnitte, außer den Abschnitt des Überschrifts festgelegten und Fußzeilen vorformulierten vorformulierten festgelegten, werden in einem Namespace mit dem Namen eingeschlossen, der von der Bibliothek-Anweisung in der ursprünglichen IDL-Datei angegeben wird.Sie können die Namen der Typbibliothek verwenden Header entweder durch eine explizite Qualifizierung mit dem Namespacenamen oder indem Sie die folgende Anweisung einfügen:

using namespace MyLib;

#import unmittelbar hinter der Anweisung im Quellcode.

Der Namespace kann unterdrückt werden, indem das Attribut der no_namespace#import-Direktiven verwendet.Allerdings führt möglicherweise zu Namenskonflikten das Unterdrücken des Namespaces.Der Namespace kann durch das rename_namespace-Attribut ebenfalls umbenannt werden.

Der Compiler stellt den vollständigen Pfad zu einer beliebigen abhängigkeit Typbibliothek bereit, die von der Typbibliothek erforderlich ist, die sie gerade verarbeitet.Der Pfad wird in Form von Kommentaren in den Header der Typbibliothek () geschrieben .TLH für jede verarbeitete vom Compiler generierte Typbibliothek.

Wenn eine Typbibliothek Verweise auf Typen enthält, die in anderen Typbibliotheken definiert sind, dann enthält die TLH-Datei Sortierung der folgenden Kommentare ein:

//
// Cross-referenced type libraries:
//
//  #import "c:\path\typelib0.tlb"
//

Der tatsächliche Name der Datei im #import Kommentar ist der vollständige Pfad der referenzierten Typbibliothek, wie er in der Registrierung gespeichert.Wenn Sie Fehler aufgetreten ist, die aufgrund einer fehlenden typdefinitionen sind, überprüfen Sie die Kommentare am Anfang des .TLH, um festzustellen, welche abhängigen Typbibliotheken möglicherweise zuerst importiert werden müssen.Wahrscheinliche Fehler (z. B. Syntaxfehler sind, C2143 C2146, C2321), C2501 (fehlenden deklassifizierung Parameterbezeichner) oder C2433 („kann nicht“ inline auf die beim Kompilieren der .TLI-Datei Deklaration).

Sie müssen #import-Direktive vor den #import-Direktive andernfalls der abhängigen Typbibliothek ermitteln, die bereitgestellt werden kommentaren Abhängigkeit von den Header nicht für aus System und anschließend zu einem bestimmten Zeitpunkt bereitstellen, um den Fehler zu beheben.

Weitere Informationen finden Sie, dass der im Knowledge Base-Artikel „#import Wrapper-Methoden Zugriffsverletzung“ (Q242527) oder „Compilerfehler verursacht, wenn Sie #import mit XML“ (Q269194).Knowledge Base-Artikel finden Sie auf MSDN oder Library-Medien zu https://support.microsoft.com/support/suchen.

#import Attribute

#import kann optional ein oder mehrere Attribute einschließen.Diese Attribute weisen den Compiler an, um den Inhalt der Header der Typbibliothek zu ändern.Ein Symbol des umgekehrten Schrägstrich (\) kann verwendet werden, um zusätzliche Zeilen in einer einzelnen #import-Anweisung aufzunehmen.Beispiele:

#import "test.lib" no_namespace \
   rename("OldName", "NewName")

Weitere Informationen finden Sie unter #import Attribute (C++).

bestimmten ENDES C++

Siehe auch

Referenz

Präprozessordirektiven

COM-Unterstützung des Compilers