Managed 組件是一種您為了有效地重複使用程式碼而建立的程式庫。 您可以撰寫常式一次,然後從需要其功能的應用程式中參考它們,而不需要在許多程式中重新實作相同的常式。
本逐步解說涵蓋下列工作:
建立類別庫專案。
將類別加入至類別庫。
建立會參考類別庫的應用程式。
在應用程式中使用類別庫的功能。
執行應用程式。
必要條件
若要完成此逐步解說,您必須了解 C++ 語言的基礎。 如果您才剛開始學習 C++,建議您參考 Herb Schildt 的《C++ Beginner's Guide》。您可以在 MSDN 網站的初學者開發人員學習中心 (英文) 找到這份文件。
若要建立類別庫專案
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
在 [專案類型] 窗格中,選取 [Visual C++] 下的 [CLR]。
這個群組中的每一個專案類型會建立以 Common Language Runtime (CLR) 為目標的專案。
在 [範本] 窗格中選取 [類別庫]。
在 [名稱] 方塊中輸入專案的名稱,例如 MathFuncsAssembly。 在 [方案名稱] 欄位中,輸入方案的名稱,例如 ManagedAssemblies。
按一下 [確定] 建立專案。
根據預設,建立專案時,專案是設定成使用先行編譯的標頭。 若要停用 MathFuncsAssembly 專案之先行編譯的標頭,請在 [方案總管] 中選取專案,然後按一下 [專案] 功能表上的 [屬性]。 依序展開 [組態屬性] 節點、[C/C++] 節點,然後選取 [先行編譯標頭]。 在 [建立/使用先行編譯標頭] 旁的清單中,選取 [未使用先行編譯標頭檔]。 按一下 [確定] 儲存這些變更。 如需詳細資訊,請參閱 建立先行編譯標頭檔。
若要將類別加入至類別庫
建立 CLR 類別庫之後,精靈會為您產生一個基本的類別。 所產生的標頭檔和原始程式檔兩者都具有您在建立專案時提供給專案的名稱。 在本範例中,它們的名稱分別是 MathFuncsAssembly.h 和 MathFuncsAssembly.cpp。
使用名稱為 MyMathFuncsAssembly 的基本類別,取代 MathFuncsAssembly.h 中的現有程式碼。 這個類別會執行一般算術運算,例如加法、減法、乘法和除法。 程式碼應類似於下列範例。
// MathFuncsAssembly.h using namespace System; namespace MathFuncs { public ref class MyMathFuncs { public: // Returns a + b static double Add(double a, double b); // Returns a - b static double Subtract(double a, double b); // Returns a * b static double Multiply(double a, double b); // Returns a / b // Throws DivideByZeroException if b is 0 static double Divide(double a, double b); }; }在原始程式檔中實作 MyMathFuncs 的功能。 程式碼應類似於下列範例。
// MathFuncsAssembly.cpp // compile with: /clr /LD #include "MathFuncsAssembly.h" namespace MathFuncs { double MyMathFuncs::Add(double a, double b) { return a + b; } double MyMathFuncs::Subtract(double a, double b) { return a - b; } double MyMathFuncs::Multiply(double a, double b) { return a * b; } double MyMathFuncs::Divide(double a, double b) { if (b == 0) { throw gcnew DivideByZeroException("b cannot be zero!"); } return a / b; } }按一下 [建置] 功能表上的 [建置方案],以編譯類別庫。 這樣會建立可供其他程式使用的動態連結程式庫 (DLL)。 如需 DLL 的詳細資訊,請參閱 DLL。
若要建立會參考類別庫的主控台應用程式
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
在 [專案類型] 窗格中,選取 [Visual C++] 下的 [CLR]。
在 [範本] 窗格中選取 [CLR 主控台應用程式]。
在 [名稱] 方塊中輸入專案的名稱,例如 MyExecRefsAssembly。 在 [方案] 旁邊的清單中,選取 [加入至方案],以將新專案加入至包含類別庫的方案。
按一下 [確定] 建立專案。
在 [方案總管] 中選取 MyExecRefsAssembly 專案,然後按一下 [專案] 功能表上的 [屬性],以停用該專案之先行編譯的標頭。 依序展開 [組態屬性] 節點、[C/C++] 節點,然後選取 [先行編譯標頭]。 在 [建立/使用先行編譯標頭] 旁的清單中,選取 [未使用先行編譯標頭檔]。 按一下 [確定] 儲存這些變更。
若要在主控台應用程式中使用類別庫的功能
建立了 CLR 主控台應用程式之後,精靈會產生一個只在主控台中寫下 "Hello World" 的程式。 所產生的原始程式檔具有您在建立專案時提供給專案的名稱。 在本範例中,它的名稱是 MyExecRefsAssembly.cpp。
若要使用在類別庫中建立的數學常式,您必須參考它。 若要這麼做,請選取 [方案總管] 中的 MyExecRefsAssembly 專案,然後按一下 [專案] 功能表上的 [屬性]。 在 [屬性頁] 對話方塊中,展開 [通用屬性] 節點,選取 [架構和參考],然後按一下 [加入新參考]。 如需詳細資訊,請參閱 <專案名稱> 屬性頁對話方塊、通用屬性、架構與參考。
[加入參考] 對話方塊會列出所有您可以參考的程式庫。 [.NET] 索引標籤會列出 .NET Framework 隨附的程式庫, [COM] 索引標籤則會列出電腦上所有的 COM 元件。 [專案] 索引標籤會列出目前方案中的所有專案,以及這些專案所包含的任何程式庫。 在 [專案] 索引標籤上,選取 [MathFuncsAssembly],然後按一下 [確定]。
注意事項您可以藉由包含 #using 指示詞 (例如 #using <MathFuncsAssembly.dll>),直接從原始程式檔參考組件。 如需詳細資訊,請參閱 #using Directive (C/C++)。
現在您就可以在此應用程式中使用 MyMathFuncs 類別。 在 MyExecRefsAssembly.cpp 中,使用下列程式碼來取代檔案函式的內容。
// MyExecRefsAssembly.cpp // compile with: /clr /FUMathFuncsAssembly.dll using namespace System; int main(array<System::String ^> ^args) { double a = 7.4; int b = 99; Console::WriteLine("a + b = {0}", MathFuncs::MyMathFuncs::Add(a, b)); Console::WriteLine("a - b = {0}", MathFuncs::MyMathFuncs::Subtract(a, b)); Console::WriteLine("a * b = {0}", MathFuncs::MyMathFuncs::Multiply(a, b)); Console::WriteLine("a / b = {0}", MathFuncs::MyMathFuncs::Divide(a, b)); return 0; }按一下 [建置] 功能表上的 [建置方案],以建置可執行檔。
若要執行應用程式
在 [方案總管] 中選取 MyExecRefsAssembly,然後按一下 [專案] 功能表上的 [設定為啟始專案],確定已選取 MyExecRefsAssembly 做為預設專案。
若要執行此專案,請在 [偵錯] 功能表上,按一下 [啟動但不偵錯]。 輸出應類似於下列範例。
a + b = 106.4 a - b = -91.6 a * b = 732.6 a / b = 0.0747474747474748
後續步驟
上一個主題:逐步解說:建立和使用靜態程式庫 (C++)。 下一個主題:下一步 (C++)。