Freigeben über


#using Direktiven (C++)

Importiert Metadaten in ein Programm, das /clrkompiliert wird.

#using file [as_friend]

Parameter

  • file
    Ein MSIL DLL-, EXE-, oder legt diese fest.NETMODULE-Datei oder OBJ-Datei.Beispiel:

    #using <MyComponent.dll>

  • as_friend
    Gibt an, dass alle Typen in file zugegriffen werden kann.Weitere Informationen finden Sie unter Friend-Assemblys (C++).

Hinweise

file kann eine Datei auf dem Microsoft Intermediate Language (MSIL) sein, die Sie für die verwaltete Daten als auch verwaltete Konstrukte importieren.Wenn eine DLL-Datei ein Assemblymanifest enthält, werden alle .dlls, die in das Manifest verwiesen werden, importiert und die Assembly, die Sie in den Metadaten Listendatei werden als Assemblyverweis erstellen.

Wenn file keine Assembly enthält (wenn file ein Modul ist) und wenn Sie nicht beabsichtigen, Typinformationen des Moduls in der aktuellen (Assembly) Anwendung zu verwenden, können Sie mit nur angeben, dass das Modul Teil der Assembly ist. Verwendung /ASSEMBLYMODULE.Die Typen im Modul würden dann auf jede Anwendung verfügbar sein, die die Assembly verwiesen hat.

Eine Alternative, wenn #using zu verwenden, besteht die /FU-Compileroption.

.exe-Assemblys, die #using übergeben werden, sollten mit /clr:safe oder /clr:pureoder mit keinem anderen Visual Studio-Compiler kompiliert werden (Visual Basic oder Visual C# (z).Der Versuch, Metadaten aus einer .exe-Assembly zu importieren, die mit /clr kompiliert wurde, führt zu einer Datei geladen werden ausnahme.

HinweisHinweis

Eine Komponente, die #using verwiesen wird, kann mit einer anderen Version der Datei ausgeführt werden, die zur Kompilierzeit importiert wird und eine Clientanwendung zu unerwarteten Ergebnissen führen können.

Damit der Compiler einen Typ in einer Assembly (nicht in einem Modul) erkennen kann, muss die Auflösung des Typs erzwungen werden. Dies wird z. B. durch die Definition einer Instanz des betreffenden Typs erreicht.Der Compiler verfügt über andere Möglichkeiten, um die Typnamen in einer Assembly aufzulösen. Beispielsweise wird dem Compiler beim Erben von einem Typ in einer Assembly der Typname mitgeteilt.

Wenn die Metadaten importiert wurden, die aus dem Quellcode erstellt werden, die verwendete __declspec (thread)Semantik der Thread nicht in den Metadaten beibehalten werden.Beispielsweise verfügt eine Variable, die mit **__declspec (thread)**deklariert wird, in einem Programm kompiliert ist, die während der Erstellung .NET Framework-Common Language Runtime und dann über #usingimportiert wurde, nicht mehr __declspec (thread) Semantik für die Variable.

Alle importierten Typen (verwaltet und systemeigen) in einer Datei, die von #using verwiesen wird, können aber der Compiler behandelt als systemeigene Typen der Deklarationen nicht.

mscorlib.dll wird automatisch beim Kompilieren mit /clrverwiesen.

Die LIBPATH-Umgebungsvariable wird die Verzeichnisse an, die durchsucht werden, wenn der Compiler versucht, die Dateinamen aufzulösen, die an #usingübergeben werden.

Der Compiler sucht nach Verweisen auf dem folgenden Pfad:

  • Ein Pfad angegeben in der #using-Anweisung.

  • Das aktuelle Verzeichnis.

  • Das .NET Framework-Systemverzeichnis.

  • Verzeichnisse mit der Compileroption /AI hinzugefügt.

  • Verzeichnisse auf LIBPATH-Umgebungsvariable.

Beispiel

Wenn Sie eine Assembly erstellen (C) und (B) eine Assembly verwiesen, die selbst eine andere Assembly (A) verweist, müssen Sie nicht explizit Assembly A verweisen, sofern Sie nicht explizit einen von A Typen in C verwenden.

// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};

// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
   void Test(A a) {}
   void Test() {}
};

Im folgenden Beispiel gibt es keinen Compilerfehler für Verweise nicht von using_assembly_A.dll, da das Programm mit keinem der Typen verwendet, die in using_assembly_A.cpp definiert sind.

// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
   B b;
   b.Test();
}

Siehe auch

Referenz

Präprozessordirektiven