演練:建立和使用靜態庫 (C++)

來源:互聯網
上載者:User

我們將建立的下一個庫類型是靜態庫 (LIB)。 使用靜態庫是重用代碼的一種絕佳方式。 您不必在自己建立的每個程式中重新實現同一常式,而只需對這些常式編寫一次,然後從需要該功能的應用程式引用它們即可。

本演練示範如何完成以下任務:

  • 建立靜態庫項目。

  • 向靜態庫添加類。

  • 建立引用靜態庫的控制台應用程式。

  • 在應用程式中使用靜態庫的功能。

  • 運行該應用程式。

系統必備

本主題假定您具備 C++ 語言的基礎知識。 如果您是剛開始學習 C++,建議參閱 MSDN Library 中的此教程:第一層:C++ 初學者指南。

建立靜態庫項目
  1. 在[檔案] 功能表中,選擇“建立”,然後選擇“項目”。

  2. 在“項目類型”窗格中,選擇“Visual C++”下的“Win32”。

  3. 在“模板”窗格中,選擇“Win32 控制台應用程式”。

  4. 為項目選擇一個名稱(例如 MathFuncsLib),並將該名稱輸入“名稱”欄位。 為解決方案選擇一個名稱(例如 StaticLibrary),並將該名稱輸入“解決方案名稱”欄位。

  5. 單擊“確定”啟動 Win32 應用程式嚮導。 在“Win32 應用程式嚮導”對話方塊的“概述”頁中,單擊“下一步”。

  6. 在“Win32 應用程式嚮導”的“應用程式設定”頁中,選擇“應用程式類型”下的“靜態庫”。

  7. 在“Win32 應用程式嚮導”的“應用程式設定”頁中,清除“附加選項”下的“先行編譯頭”複選框。

  8. 單擊“完成”建立項目。

向靜態庫添加類
  1. 若要為新類建立標頭檔,請從“項目”菜單中選擇“添加新項”。 將顯示“添加新項”對話方塊。 從“類別”窗格中,選擇“Visual C++”下的“代碼”。 從“模板”窗格中選擇“標頭檔(.h)”。 為標頭檔選擇一個名稱(例如 MathFuncsLib.h),然後單擊“添加”。 將顯示一個空白檔案。

  2. 添加一個名為“MyMathFuncs”的類以執行常見的算術運算,如加、減、乘和除。 為此,請將 MathFuncsLib.h 的內容替換為下面的代碼。

?
123456789101112131415161718192021 // MathFuncsLib.h   namespace MathFuncs {     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);     }; }

 

  1. 若要為新類建立源檔案,請從“項目”菜單中選擇“添加新項”。 將顯示“添加新項”對話方塊。 從“類別”窗格中,選擇“Visual C++”下的“代碼”。 從“模板”窗格中,選擇“C++ 檔案(.cpp)”。 為源檔案選擇一個名稱(例如 MathFuncsLib.cpp),然後單擊“添加”。 將顯示一個空白檔案。

  2. 在源檔案中實現 MyMathFuncs 的功能。 為此,請將 MathFuncsLib.cpp 的內容替換為下面的代碼。

 

?
12345678910111213141516171819202122232425262728293031323334353637 // MathFuncsLib.cpp // compile with: /c /EHsc // post-build command: lib MathFuncsLib.obj   #include "MathFuncsLib.h"   #include <stdexcept>   using namespace std;   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 new invalid_argument("b cannot be zero!");         }           return a / b;     } }

 

  1. 若要將項目產生為靜態庫,請從“項目”菜單中選擇“屬性”。 在左窗格中,選擇“配置屬性”下的“常規”。 在右窗格中,將“配置類型”更改為“靜態庫(.lib)”。 單擊“確定”儲存更改。

    注意

    如果是從命令列產生,必須分兩個步驟來產生程式。 首先,通過使用帶編譯器選項 /cCl.exe 編譯代碼 (cl /c /EHsc MathFuncsLib.cpp)。 這將建立名為“MathFuncsLib.obj”的對象檔案。 有關更多資訊,請參見 /c(在不連結的情況下進行編譯)。 接著,使用庫管理器 Lib.exe 連結代碼 (lib MathFuncsLib.obj)。 這將建立靜態庫“MathFuncsLib.lib”。 有關庫管理器的更多資訊,請參見LIB 引用。

  2. 編譯該靜態庫,方法是選擇“產生”菜單中的“產生解決方案”。 這將建立一個可供其他程式使用的靜態庫。

建立引用靜態庫的控制台應用程式
  1. 若要建立將引用並使用剛建立的靜態庫的應用程式,請從[檔案] 功能表中選擇“建立”,然後選擇“項目”。

  2. 在“項目類型”窗格中,選擇“Visual C++”下的“Win32”。

  3. 在“模板”窗格中,選擇“Win32 控制台應用程式”。

  4. 為項目選擇一個名稱(如 MyExecRefsLib),並將其鍵入“名稱”欄位。 在“解決方案”旁邊的下拉式清單方塊中選擇“添入解決方案”。 這會將新項目添加到該靜態庫所屬的同一個解決方案中。

  5. 單擊“確定”啟動“Win32 應用程式嚮導”。 在“Win32 應用程式嚮導”對話方塊的“概述”頁中,單擊“下一步”。

  6. 在“Win32 應用程式嚮導”的“應用程式設定”頁中,選擇“應用程式類型”下的“控制台應用程式”。

  7. 在“Win32 應用程式嚮導”的“應用程式設定”頁中,清除“附加選項”下的“先行編譯頭”。

  8. 單擊“完成”建立項目。

在應用程式中使用靜態庫的功能
  1. 建立控制台應用程式後,該嚮導將為您建立一個空程式。 源檔案的名稱與您在前面為項目選擇的名稱相同。 在本樣本中,名為“MyExecRefsLib.cpp”。

  2. 您必須引用所建立的靜態庫才能使用其算術常式。 為此,請在“項目”菜單中選擇“引用”。 在 MyExecRefsLib“屬性頁面”對話方塊中,展開“通用屬性”節點,然後單擊“添加新引用”。 有關“引用”對話方塊的更多資訊,請參見“<Projectname> 屬性頁面”對話方塊 ->“通用屬性”->“架構和引用”。

  3. 將顯示“添加引用”對話方塊。 “項目”選項卡列出了當前解決方案中的各個項目以及可以引用的所有庫。 在“項目”選項卡中,選擇 MathFuncsLib。 單擊“確定”。

  4. 若要引用 MathFuncsLib.h 標頭檔,必須修改包含目錄路徑。 在 MyExecRefsLib“屬性頁面”對話方塊中,展開“配置屬性”節點,展開“C/C++”節點,然後選擇“常規”。 在“附加元件封裝含目錄”屬性值中,鍵入 MathFuncsLib 目錄的路徑或瀏覽至該目錄。

    若要瀏覽至目錄路徑,請在屬性值下拉式清單方塊中單擊“編輯”。 在“附加元件封裝含目錄”對話方塊中的在文字框中選擇一個空行,然後單擊行尾的省略符號按鈕(“…”)。在“選擇目錄”對話方塊中,選擇 MathFuncsLib 目錄,然後單擊“選擇檔案夾”儲存所做的選擇並關閉對話方塊。 在“附加元件封裝含目錄”對話方塊中,單擊“確定”。

  5. 現在即可在此應用程式中使用 MyMathFuncs 類。 為此,請將 MyExecRefsLib.cpp 的內容替換為下面的代碼。

?
12345678910111213141516171819202122232425 // MyExecRefsLib.cpp // compile with: /EHsc /link MathFuncsLib.lib   #include <iostream>   #include "MathFuncsLib.h"   using namespace std;   int main() {     double a = 7.4;     int b = 99;       cout << "a + b = " <<         MathFuncs::MyMathFuncs::Add(a, b) << endl;     cout << "a - b = " <<         MathFuncs::MyMathFuncs::Subtract(a, b) << endl;     cout << "a * b = " <<         MathFuncs::MyMathFuncs::Multiply(a, b) << endl;     cout << "a / b = " <<         MathFuncs::MyMathFuncs::Divide(a, b) << endl;       return 0; }

 

  1. 通過從“產生”菜單中選擇“產生解決方案”,產生可執行檔。

運行應用程式
  1. 確保選擇“MyExecRefsLib”作為預設項目。 在“方案總管”中,選擇 MyExecRefsLib,然後從“項目”菜單中選擇“設為啟動項目”。

  2. 若要運行項目,請選擇“調試”菜單中的“開始執行(不調試)”。 輸出應該與下面的內容類別似:

    a + b = 106.4a - b = -91.6a * b = 732.6a / b = 0.0747475
from:http://www.cnblogs.com/rollenholt/archive/2012/04/14/2447021.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.