Udostępnij za pośrednictwem


dyrektywa #using (C++/CLI)

Importuje metadane do programu skompilowanego za pomocą polecenia /clr.

Składnia

#usingplik [as_friend]

Parametry

plik
Microsoft Intermediate Language (MSIL) .dll, .exe, .netmodulelub .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ą #usingmetody , 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ą /clrpolecenia .

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();
}

Zobacz też

Dyrektywy preprocesora