dyrektywa #using (C++/CLI)
Importuje metadane do programu skompilowanego za pomocą polecenia /clr.
Składnia
#using
plik [as_friend
]
Parametry
plik
Microsoft Intermediate Language (MSIL) .dll
, .exe
, .netmodule
lub .obj
file. Na przykład:
#using <MyComponent.dll>
as_friend
Określa, że wszystkie typy w pliku są dostępne. Aby uzyskać więcej informacji, zobacz Friend Assemblies (C++).
Uwagi
plik może być plikiem języka microsoft intermediate language (MSIL), który importujesz na potrzeby zarządzanych danych i konstrukcji zarządzanych. Jeśli biblioteka DLL zawiera manifest zestawu, importowane są wszystkie biblioteki DLL, do których odwołuje się manifest. Kompilowana zestaw będzie zawierać listę plików w metadanych jako odwołanie do zestawu.
Być może plik nie zawiera zestawu (plik jest modułem) i nie zamierzasz używać informacji o typie z modułu w bieżącej aplikacji (zestawu). Możesz wskazać, że moduł jest częścią zestawu przy użyciu / ASSEMBLYMODULE. Typy w module będą następnie dostępne dla każdej aplikacji, która odwołuje się do zestawu.
Alternatywą do użycia #using
jest opcja /FU kompilatora.
.exe zestawy przekazane do #using
powinny być kompilowane przy użyciu jednego z kompilatorów programu Visual Studio platformy .NET (na przykład Visual Basic lub Visual C#). Próba zaimportowania metadanych z zestawu .exe skompilowanego za pomocą /clr
polecenia spowoduje wyjątek ładowania pliku.
Uwaga
Składnik, do którego odwołuje #using
się odwołanie, można uruchomić z inną wersją pliku zaimportowanego w czasie kompilacji, co powoduje, że aplikacja kliencka daje nieoczekiwane wyniki.
Aby kompilator rozpoznawał typ w zestawie (a nie w module), musi być zmuszony do rozpoznania typu. Możesz wymusić na przykład zdefiniowanie wystąpienia typu. Istnieją inne sposoby rozpoznawania nazw typów w zestawie kompilatora. Jeśli na przykład dziedziczysz z typu w zestawie, nazwa typu stanie się znana kompilatorowi.
Podczas importowania metadanych utworzonych z kodu źródłowego używanego __declspec(thread)
semantyka wątku nie jest utrwalana w metadanych. Na przykład zmienna zadeklarowana __declspec(thread)
za pomocą polecenia skompilowana w programie utworzonym dla środowiska uruchomieniowego języka wspólnego programu .NET Framework, a następnie zaimportowana za pomocą #using
metody , nie będzie miała __declspec(thread)
semantyki w zmiennej.
Wszystkie importowane typy (zarządzane i natywne) w pliku, do których odwołuje się #using
plik, są dostępne, ale kompilator traktuje typy natywne jako deklaracje, a nie definicje.
mscorlib.dll jest automatycznie przywołyny podczas kompilowania za pomocą /clr
polecenia .
Zmienna środowiskowa LIBPATH określa katalogi do wyszukiwania, gdy kompilator rozpoznaje nazwy plików przekazane do #using
.
Kompilator wyszukuje odwołania w następującej ścieżce:
Ścieżka określona w instrukcji
#using
.Bieżący katalog.
Katalog systemowy programu .NET Framework.
Katalogi dodane z opcją kompilatora
/AI
.Katalogi w zmiennej środowiskowej LIBPATH.
Przykłady
Można utworzyć zestaw odwołujący się do drugiego zestawu, który odwołuje się do trzeciego zestawu. Musisz jawnie odwołać się do trzeciego zestawu z pierwszego, jeśli jawnie używasz jednego z jego typów.
Plik using_assembly_A.cpp
źródłowy:
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
Plik using_assembly_B.cpp
źródłowy:
// using_assembly_B.cpp
// compile with: /clr /LD
#using "using_assembly_A.dll"
public ref class B {
public:
void Test(A a) {}
void Test() {}
};
W poniższym przykładzie kompilator nie zgłasza błędu dotyczącego odwoływania się do using_assembly_A.dll, ponieważ program nie używa żadnych typów zdefiniowanych w using_assembly_A.cpp.
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}