# using 指示詞 (C++)
中繼資料匯入程式,以編譯 /clr。
#using file [as_friend]
參數
file
的 MSIL.dll,.exe,而定。 netmodule,或是。 物件 例如:#using <MyComponent.dll>
as_friend
指定所有型別在file都可以存取。 如需詳細資訊,請參閱 Friend 組件 (C++)。
備註
file可以是 Microsoft 中繼語言 (MSIL) 檔案匯入其管理的資料和受管理的建構。 如果.dll 檔會包含組件資訊清單,然後匯入所有的資訊清單中參考的 dll,而您正在建置的組件也會列出檔案做為組件參考的中繼資料中。
如果file不包含組件 (如果file是一個模組),如果您不想要從模組的型別資訊用於目前的 (組件) 應用程式,您可以選擇只指出模組部分組件。 使用 /ASSEMBLYMODULE。 將任何參考組件的應用程式使用的模組中的型別。
另一個方法是使用#using是 /FU 編譯器選項。
.exe 的組件傳遞至#using應該編譯與**/clr:safe或/clr:pure**,或任何其他 Visual Studio 的編譯器 (Visual Basic 或視覺化 C#,例如)。 嘗試以編譯的.exe 組件匯入中繼資料**/clr**將會導致檔案載入例外狀況。
注意事項 |
---|
參考的元件#using您可以執行不同版本的匯入檔案在編譯時期,導致用戶端應用程式,來產生不可預期的結果。 |
如果要讓編譯器辨認組件 (而非模組) 中的某個型別,就必須強制它解析這個型別,您可以藉由定義該型別的執行個體來進行這種強制解析。 還有其他方法可以為編譯器解析決組件中的型別名稱,例如,如果您是從組件中的型別繼承,編譯器隨後即可得知型別名稱。
當匯入中繼資料所用的來源程式碼建置 __declspec(thread),執行緒語意並不會保存在中繼資料中。 比方說,所宣告的變數 __declspec(thread)、 編譯是組建的程式中。NET Framework 公用語言執行時間,並接著匯入透過#using,將不再有 __declspec(thread) 變數的語意。
匯入型別 (managed 和原生) 所參照的檔案中的所有#using是可供使用,但編譯器會原生型別視為宣告未定義。
以編譯時,會自動參考識別**/clr**。
LIBPATH 環境變數指定當編譯器嘗試解析檔名傳遞給要搜尋的目錄#using。
編譯器要搜尋參考下列路徑:
在指定的路徑#using陳述式。
目前的目錄。
。NET Framework 的系統目錄。
新增目錄 /AI 編譯器選項。
LIBPATH 環境變數上的目錄。
範例
如果您建置組件 (C),並參考本身又參考另一個組件 (A) 的組件 (B),您不必明確地參考組件 a,除非您明確地使用其中一個 a 的型別 c
// using_assembly_A.cpp
// compile with: /clr /LD
public ref class A {};
// 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();
}