#using 指示詞 (C++/CLI)

將中繼資料匯入使用 /clr 編譯的程式。

語法

#using檔案 [ as_friend ]

參數

file
Microsoft 中繼語言 (MSIL) .dll.exe.netmodule.obj 檔案。 例如,

#using <MyComponent.dll>

as_friend
指定檔案中的所有 類型都可以存取。 如需詳細資訊,請參閱 Friend 元件 (C++)。

備註

file 可以是 Microsoft 中繼語言 (MSIL) 檔案,您可以針對其 Managed 資料和 Managed 建構匯入。 如果 DLL 包含元件資訊清單,則會匯入資訊清單中參考的所有 DLL。 您要建置的元件會將中繼資料中的檔案 列為 元件參考。

也許 檔案 不包含元件( 檔案 是模組),而且您不打算在目前 (元件) 應用程式中使用模組的類型資訊。 您可以使用 /ASSEMBLYMODULE ,指出模組是元件的 一部分。 任何參考該組件的應用程式就可以使用模組的類型。

另一種使用 #using 方式是 /FU 編譯器選項。

傳遞至 #using 的 .exe 元件應該使用其中一個 .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();
}

另請參閱

預處理器指示詞