#using 指示詞 (C++/CLI)
將元數據匯入使用 /clr 編譯的程式。
語法
#using
檔案 [as_friend
]
參數
file
Microsoft中繼語言 (MSIL) .dll
、 .exe
、 .netmodule
或 .obj
檔案。 例如,
#using <MyComponent.dll>
as_friend
指定檔案中的所有類型都可以存取。 如需詳細資訊,請參閱 Friend 元件(C++)。
備註
file 可以是您為其受控數據和 Managed 建構匯入的Microsoft中繼語言 (MSIL) 檔案。 如果 DLL 包含元件指令清單,則會匯入指令清單中參考的所有 DLL。 您要建置的元件會將元數據中的檔案列為元件參考。
也許 檔案 不包含元件(檔案 是模組),而且您不打算在目前 (元件) 應用程式中使用模組的類型資訊。 您可以使用 /ASSEMBLYMODULE,指出模組是元件的一部分。 任何參考該組件的應用程式就可以使用模組的類型。
另一種使用 #using
方式是 /FU 編譯程序選項。
.exe傳遞至 #using
的元件應該使用其中一個 .NET Visual Studio 編譯程式來編譯 (例如 Visual Basic 或 Visual C# )。 嘗試從以 /clr
編譯的 .exe 組件匯入中繼資料,可能會產生檔案載入例外狀況。
注意
所 #using
參考的元件可以使用編譯時期匯入的不同檔案版本來執行,導致用戶端應用程式產生非預期的結果。
為了讓編譯程式能夠辨識元件中的類型(而非模組),必須強制解析類型。 例如,您可以定義 型別的實例來強制它。 還有其他方法可以解析編譯程式元件中的類型名稱。 例如,如果您繼承自元件中的類型,編譯程式就會知道類型名稱。
從使用 __declspec(thread)
的原始碼匯入元數據時,線程語意不會保存在元數據中。 例如,以 __declspec(thread)
宣告的變數,在針對 .NET Framework Common Language Runtime 建置的程式中編譯,然後透過 #using
匯入的 變數不會有 __declspec(thread)
變數的語意。
所參考 #using
檔案中的所有匯入類型(同時受管理及原生)都可供使用,但編譯程式會將原生類型視為宣告,而不是定義。
以 /clr
編譯時,mscorlib.dll 會自動參考。
當編譯程式解析傳遞至 #using
的檔名時,LIBPATH 環境變數會指定要搜尋的目錄。
編譯程式會沿著下列路徑搜尋參考:
語句中指定的
#using
路徑。目前目錄。
.NET Framework 系統目錄。
使用編譯程式選項新增的
/AI
目錄。LIBPATH 環境變數的目錄。
範例
您可以建置元件,參考本身參考第三個元件的第二個元件。 如果您明確使用其中一個類型,您只需要從第一個元件明確參考第三個元件。
來源檔案 using_assembly_A.cpp
:
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
來源檔案 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() {}
};
在下列範例中,編譯程式不會報告有關參考using_assembly_A.dll的錯誤,因為程式不會使用using_assembly_A.cpp中定義的任何類型。
// using_assembly_C.cpp
// compile with: /clr
#using "using_assembly_B.dll"
int main() {
B b;
b.Test();
}