Arahan #using (C++/CLI)
Mengimpor metadata ke dalam program yang dikompilasi dengan /clr.
Sintaks
#using
file [as_friend
]
Parameter
file
Bahasa perantara Microsoft (MSIL) .dll
, , .exe
, .netmodule
, atau .obj
file. Contohnya,
#using <MyComponent.dll>
as_friend
Menentukan bahwa semua tipe dalam file dapat diakses. Untuk informasi selengkapnya, lihat Rakitan Teman (C++).
Keterangan
file dapat menjadi file bahasa perantara Microsoft (MSIL) yang Anda impor untuk data terkelola dan konstruksi terkelolanya. Jika DLL berisi manifes rakitan, maka semua DLL yang direferensikan dalam manifes diimpor. Rakitan yang Anda buat akan mencantumkan file dalam metadata sebagai referensi perakitan.
Mungkin file tidak berisi rakitan (file adalah modul), dan Anda tidak berniat menggunakan informasi jenis dari modul di aplikasi (rakitan) saat ini. Anda dapat menunjukkan modul adalah bagian dari perakitan dengan menggunakan /ASSEMBLYMODULE. Jenis dalam modul kemudian akan tersedia untuk aplikasi apa pun yang mereferensikan perakitan.
Alternatif untuk digunakan #using
adalah opsi pengkompilasi /FU .
.exe rakitan yang diteruskan harus #using
dikompilasi dengan menggunakan salah satu kompilator .NET Visual Studio (Visual Basic atau Visual C#, misalnya). Mencoba mengimpor metadata dari rakitan .exe yang dikompilasi akan /clr
menghasilkan pengecualian beban file.
Catatan
Komponen yang direferensikan dengan #using
dapat dijalankan dengan versi file yang berbeda yang diimpor pada waktu kompilasi, menyebabkan aplikasi klien memberikan hasil yang tidak terduga.
Agar pengkompilasi mengenali jenis dalam rakitan (bukan modul), pengkompilasi perlu dipaksa untuk menyelesaikan jenisnya. Anda dapat memaksanya, misalnya, dengan menentukan instans jenisnya. Ada cara lain untuk mengatasi nama jenis dalam rakitan untuk pengkompilasi. Misalnya, jika Anda mewarisi dari jenis dalam rakitan, nama jenis diketahui oleh pengkompilasi.
Saat mengimpor metadata yang dibangun dari kode sumber yang menggunakan __declspec(thread)
, semantik utas tidak bertahan dalam metadata. Misalnya, variabel yang dideklarasikan dengan __declspec(thread)
, dikompilasi dalam program yang dibangun untuk runtime bahasa umum .NET Framework, lalu diimpor melalui #using
, tidak akan memiliki __declspec(thread)
semantik pada variabel.
Semua jenis yang diimpor (baik terkelola maupun asli) dalam file yang direferensikan oleh #using
tersedia, tetapi pengkompilasi memperlakukan jenis asli sebagai deklarasi, bukan definisi.
mscorlib.dll secara otomatis dirujuk saat mengkompilasi dengan /clr
.
Variabel lingkungan LIBPATH menentukan direktori yang akan dicari ketika pengkompilasi menyelesaikan nama file yang diteruskan ke #using
.
Pengkompilasi mencari referensi di sepanjang jalur berikut:
Jalur yang ditentukan dalam
#using
pernyataan.Direktori saat ini.
Direktori sistem .NET Framework.
Direktori ditambahkan dengan
/AI
opsi pengkompilasi.Direktori pada variabel lingkungan LIBPATH.
Contoh
Anda dapat membangun rakitan yang mereferensikan rakitan kedua yang sendiri mereferensikan rakitan ketiga. Anda hanya perlu secara eksplisit mereferensikan rakitan ketiga dari yang pertama jika Anda secara eksplisit menggunakan salah satu jenisnya.
File sumber using_assembly_A.cpp
:
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
File sumber 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() {}
};
Dalam sampel berikut, pengkompilasi tidak melaporkan kesalahan tentang mereferensikan using_assembly_A.dll, karena program tidak menggunakan salah satu jenis yang ditentukan dalam using_assembly_A.cpp.
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}