Sdílet prostřednictvím


#using – direktiva (C++/CLI)

Importuje metadata do programu kompilovaného pomocí /clr.

Syntaxe

#usingsoubor [as_friend]

Parametry

soubor
Jazyk MSIL (Microsoft Intermediate Language) .dll, .exe, .netmodule, nebo .obj soubor. Příklad:

#using <MyComponent.dll>

as_friend
Určuje, že všechny typy v souboru jsou přístupné. Další informace naleznete v tématu Přátelská sestavení (C++).

Poznámky

soubor může být soubor jazyka MSIL (Microsoft Intermediate Language), který importujete pro spravovaná data a spravované konstrukty. Pokud knihovna DLL obsahuje manifest sestavení, importují se všechny knihovny DLL odkazované v manifestu. Sestavení, které vytváříte, vypíše soubor v metadatech jako odkaz na sestavení.

Soubor možná neobsahuje sestavení (soubor je modul) a nemáte v úmyslu používat informace o typu z modulu v aktuální aplikaci (sestavení). Modul může být součástí sestavení pomocí /ASSEMBLYMODULE. Typy z modulu pak budou k dispozici pro všechny aplikace, které odkazují na sestavení.

Alternativou k použití #using je možnost kompilátoru /FU .

.exe sestavení předaná do sestavení #using by měla být zkompilována pomocí některého z kompilátorů sady .NET Visual Studio (například Visual Basic nebo Visual C#). Při pokusu o import metadat ze sestavení .exe kompilovaného s /clr dojde k výjimce načítání souboru.

Poznámka:

Součást, na kterou odkazujete #using , je možné spustit s jinou verzí souboru importovaného v době kompilace, což způsobí, že klientská aplikace poskytne neočekávané výsledky.

Aby kompilátor rozpoznal typ v sestavení (nikoli modulu), musí být nucen k vyřešení typu. Můžete ho například vynutit definováním instance typu. Existují další způsoby překladu názvů typů v sestavení kompilátoru. Pokud například dědíte z typu v sestavení, název typu se zdědí kompilátoru.

Při importu metadat vytvořených ze zdrojového kódu, který se použil __declspec(thread), se sémantika vlákna neuchovávají v metadatech. Například proměnná deklarovaná pomocí __declspec(thread), zkompilovaná v programu, který je sestaven pro modul CLR .NET Framework a poté importován prostřednictvím #using, nebude mít __declspec(thread) sémantiku proměnné.

Všechny importované typy (spravované i nativní) v souboru, na který #using odkazuje, jsou k dispozici, ale kompilátor považuje nativní typy za deklarace, nikoli definice.

Soubor mscorlib.dll je při kompilaci s /clr odkazován automaticky.

Proměnná prostředí LIBPATH určuje adresáře, které mají být prohledány při překladu názvů souborů předaných kompilátoru #using.

Kompilátor hledá odkazy v následující cestě:

  • Cesta zadaná v #using příkazu.

  • Aktuální adresář.

  • Systémový adresář rozhraní .NET Framework.

  • Adresáře přidané s možností kompilátoru /AI .

  • Adresáře dle proměnné prostředí LIBPATH.

Příklady

Můžete vytvořit sestavení, které odkazuje na druhé sestavení, které samotné odkazuje na třetí sestavení. Pokud explicitně použijete jeden z jeho typů, musíte na třetí sestavení explicitně odkazovat.

Zdrojový soubor using_assembly_A.cpp:

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

Zdrojový soubor using_assembly_B.cpp:

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

V následující ukázce kompilátor neohlásí chybu týkající se odkazování na using_assembly_A.dll, protože program nepoužívá žádný z typů definovaných v using_assembly_A.cpp.

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

Viz také

Direktivy preprocesoru