#using – direktiva (C++/CLI)
Importuje metadata do programu kompilovaného pomocí /clr.
Syntaxe
#using
soubor [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();
}