建立和使用 Managed 組件 (C++)
更新:2007 年 11 月
我們將會建立的下一個程式庫類型是 Managed 組件。使用 Managed 組件是重複使用程式碼的好方法,您只需要撰寫這些常式一次,並從需要其功能的應用程式中參考它們,而不需要在所建立的每個程式中都重新實作相同的常式。
本逐步解說將涵蓋下列項目:
建立新的類別庫專案。
將類別加入至類別庫。
建立會參考類別庫的應用程式。
在主控台應用程式中使用類別庫的功能。
執行應用程式。
必要條件
本主題假設您已了解 C++ 語言的基礎。如果您才剛開始學習 C++,建議您參考 Herb Schildt 所著的《C++ Beginner's Guide》。您可以在 https://www.microsoft.com/taiwan/vstudio/ 找到這份文件的線上版本。
若要建立新的類別庫專案
在 [檔案] 功能表上,選取 [新增],然後再選取 [專案...]。
在 [專案類型] 窗格上,選取 [Visual C++] 下的 [CLR]。這樣便會建立以 Common Language Runtime 為目標的專案。
在 [範本] 窗格上,選取 [類別庫]。
選擇專案名稱,例如 MathFuncsAssembly,然後在 [名稱] 欄位中輸入此名稱。選擇方案名稱,例如 ManagedAssemblies,然後在 [方案名稱] 欄位中輸入此名稱。
按下 [確定] 建立專案。
根據預設,建立新專案時,新專案是設定成使用先行編譯的標頭。若要停用先行編譯的標頭,請選取 [專案] 功能表中的 [屬性],依序展開 [組態屬性] 節點、[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]。這樣便會建立以 Common Language Runtime 為目標的專案。
選取 [範本] 窗格上的 [CLR 主控台應用程式]。
選擇專案名稱,例如 MyExecRefsAssembly,然後在 [名稱] 欄位中輸入此名稱。在 [方案] 旁邊,從下拉式清單中選取 [加入至方案]。這樣會將此新專案加入至和類別庫相同的方案中。
按下 [確定] 建立專案。
根據預設,建立新專案時,新專案是設定成使用先行編譯的標頭。若要停用先行編譯的標頭,請選取 [專案] 功能表中的 [屬性],依序展開 [組態屬性] 節點、[C/C++] 節點,然後選取 [先行編譯標頭]。在 [建立/使用先行編譯標頭] 旁的下拉式清單中,選取 [未使用先行編譯標頭檔]。按下 [確定] 儲存這些變更。如需先行編譯標頭的詳細資訊,請參閱建立先行編譯標頭檔。
若要在主控台應用程式中使用類別庫的功能
建立了新的 CLR 主控台應用程式之後,會替您建立一個只在主控台中寫下 "Hello World" 的程式。原始程式檔的名稱將會與您為以上專案所選擇的名稱相同。在本範例中,它的名稱是 MyExecRefsAssembly.cpp。
若要使用在類別庫中建立的數學常式,您必須參考它。若要進行這項操作,請從 [專案] 功能表中選取 [參考]。在 [屬性頁] 對話方塊中,展開 [通用屬性] 節點,選取 [參考],然後選取 [加入新參考] 按鈕。如需 [參考] 對話方塊的詳細資訊,請參閱<Projectname> 屬性頁對話方塊、通用屬性、架構與參考。
接著會顯示 [加入參考] 對話方塊。這個對話方塊會列出您可以參考的所有程式庫。[.NET] 索引標籤會列出 .NET Framework 隨附的程式庫,[COM] 索引標籤則會列出電腦上所有的 COM 元件。[專案] 索引標籤會列出目前方案中的所有專案,以及這些專案所包含的任何程式庫。在 [專案] 索引標籤上,選取 [MathFuncsAssembly],然後按一下 [確定]。如需 [加入參考] 對話方塊的詳細資訊,請參閱加入參考對話方塊。
注意事項: 您也可以藉由包含 #using 指示詞,直接從原始程式檔參考組件,如 #using <MathFuncsAssembly.dll> 所示。如需此指示詞的詳細資訊,請參閱 The #using Directive。
現在您就可以在此應用程式中使用 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++)