動態庫學習 第1章——演練:建立和使用動態連結程式庫 (C++)

來源:互聯網
上載者:User

演練:建立和使用動態連結程式庫 (C++)

 

Visual Studio 2008

  • ·Visual Studio 2005

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

本演練涵蓋以下內容:

  • 建立新的動態連結程式庫 (DLL) 項目。
  • 向動態連結程式庫添加類。
  • 建立引用動態連結程式庫的應用程式。
  • 在控制台應用程式中使用類庫的功能。
  • 運行應用程式。

系統必備

本主題假定您具備 C++ 語言的基礎知識。 如果您是剛開始學習 C++,建議您參閱 Herb Schildt 編寫的“C++ Beginner's Guide”(《C++ 初學者指南》),該書可從 http://go.microsoft.com/fwlink/?LinkId=115303 線上獲得。

建立新的動態連結程式庫 (DLL) 項目

  1. 檔案菜單中,選擇建立,然後選擇項目…”
  2. 項目類型窗格中,選擇“Visual C++”下的“Win32”
  3. 模板窗格中,選擇“Win32 控制台應用程式
  4. 為項目選擇一個名稱,如 MathFuncsDll,並將其鍵入名稱欄位。 為解決方案選擇一個名稱,如 DynamicLibrary,並將其鍵入解決方案名稱欄位。
  5. 單擊確定啟動 Win32 應用程式嚮導。 在“Win32 應用程式嚮導對話方塊的概述頁中,單擊下一步
  6. “Win32 應用程式嚮導中的應用程式設定頁中,選擇應用程式類型下的“DLL”(如果可用),或者選擇控制台應用程式(如果“DLL”不可用)。 某些版本的 Visual Studio 不支援通過使用嚮導建立 DLL 項目。 您可以稍後對此變更,以將項目編譯為 DLL。
  7. “Win32 應用程式嚮導應用程式設定頁中,選擇附加選項下的空項目
  8. 單擊完成建立項目。

向動態連結程式庫添加類

  1. 若要為新類建立標頭檔,請從項目菜單中選擇添加新項…”。 將顯示添加新項對話方塊。 在類別窗格中,選擇“Visual C++”下的代碼。 在模板窗格中選擇標頭檔(.h)”。 為標頭檔選擇一個名稱,如 MathFuncsDll.h,並單擊添加。 將顯示一個空白檔案。
  2. 添加一個名為“MyMathFuncs”的簡單類,以執行常見的算術運算,如加、減、乘和除。 代碼應與以下內容類別似:

複製

// MathFuncsDll.h

 

namespace MathFuncs

{

    class MyMathFuncs

    {

    public:

        // Returns a + b

        static __declspec(dllexport) double Add(double a, double b);

 

        // Returns a - b

        static __declspec(dllexport) double Subtract(double a, double b);

 

        // Returns a * b

        static __declspec(dllexport) double Multiply(double a, double b);

 

        // Returns a / b

        // Throws DivideByZeroException if b is 0

        static __declspec(dllexport) double Divide(double a, double b);

    };

}

  1. 請注意此代碼方法聲明中的 __declspec(dllexport) 修飾符。 這些修飾符使 DLL 能夠匯出該方法以供其他應用程式使用。 有關更多資訊,請參見 dllexport, dllimport。
  2. 若要為新類建立源檔案,請從項目菜單中選擇添加新項…”。 將顯示添加新項對話方塊。 在類別窗格中,選擇“Visual C++”下的代碼。 在模板窗格中,選擇“C++ 檔案(.cpp)”。 為源檔案選擇一個名稱,如 MathFuncsDll.cpp,並單擊添加。 將顯示一個空白檔案。
  3. 在源檔案中實現“MyMathFuncs”的功能。 代碼應與以下內容類別似:

複製

// MathFuncsDll.cpp

// compile with: /EHsc /LD

 

#include "MathFuncsDll.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. 若要將項目產生為 DLL,請從項目菜單中選擇 MathFuncsDll屬性...”。 在左窗格中,選擇配置屬性下的常規。 在右窗格中,將配置類型更改為動態庫(.dll)”。 單擊確定儲存更改。

注意

如果您從命令列產生項目,請使用 /LD 編譯器選項指定輸出檔案應為 DLL。 有關更多資訊,請參見 /MD、/MT、/LD(使用運行庫)。

  1. 編譯該動態連結程式庫,方法是選擇產生菜單中的產生解決方案。 這樣就建立了一個可供其他程式使用的 DLL。 有關 DLL 的詳細資料,請參見 DLL。

建立引用動態連結程式庫的應用程式

  1. 若要建立將引用並使用剛建立的動態連結程式庫的應用程式,請從檔案菜單中選擇建立,然後選擇項目...”
  2. 項目類型窗格中,選擇“Visual C++”下的“Win32”
  3. 模板窗格中,選擇“Win32 控制台應用程式
  4. 為項目選擇一個名稱(如 MyExecRefsDll),並將其鍵入名稱欄位。 從解決方案旁邊的下拉式清單中選擇添入解決方案。 這會將新項目添加到該動態連結程式庫所屬的同一個解決方案中。
  5. 單擊確定啟動“Win32 應用程式嚮導。 在“Win32 應用程式嚮導對話方塊的概述頁中,單擊下一步
  6. “Win32 應用程式嚮導應用程式設定頁中,選擇應用程式類型下的控制台應用程式
  7. “Win32 應用程式嚮導應用程式設定頁中,清除附加選項下的先行編譯頭複選框。
  8. 完成建立項目。

在控制台應用程式中使用類庫的功能

  1. 建立新的控制台應用程式後,將為您建立一個空程式。 源檔案的名稱與您在前面為項目選擇的名稱相同。 在本樣本中,名為“MyExecRefsDll.cpp”。
  2. 若要使用在動態連結程式庫中建立的算術常式,則必須引用該庫。 若要執行此操作,請在方案總管中選擇 MyExecRefsDll 項目,然後從項目菜單中選擇引用...”。 在屬性頁面對話方塊中,展開通用屬性節點,選擇架構和引用,然後選擇添加新引用...”按鈕。 有關引用...”對話方塊的更多資訊,請參見“<Projectname> 屬性頁面”對話方塊 ->“通用屬性”->“架構和引用”。
  3. 顯示添加引用對話方塊。 此對話方塊列出了所有可以引用的庫。 項目選項卡列出了當前解決方案中的所有項目,以及它們包含的所有庫。 在項目選項卡中,選擇 MathFuncsDll。 然後單擊確定
  4. 若要引用動態連結程式庫的標頭檔,必須修改包含目錄路徑。 為此,請在屬性頁面對話方塊中展開配置屬性節點,然後展開“C/C++”節點,並選擇常規。 在附加元件封裝含目錄旁邊,鍵入 MathFuncsDll.h 標頭檔所在位置的路徑。
  5. 可執行檔僅在運行時載入動態連結程式庫。 必須告訴系統在哪裡尋找“MathFuncsDll.dll”。 您可以通過使用 PATH 環境變數做到這一點。 為此,請在屬性頁面對話方塊中展開配置屬性節點,並選擇調試。 在環境旁邊鍵入以下內容:PATH=<MathFuncsDll.DLL 檔案的路徑>,其中 <MathFuncsDll.dll 檔案的路徑> 應替換為 MathFuncsDll.dll 的實際位置。 單擊確定儲存所有更改。

注意

如果要從命令列而不是從 Visual Studio 運行可執行檔,則必須在命令提示字元處手動更新 PATH 環境變數,如下所示:set PATH=%PATH%;<MathFuncsDll.DLL 檔案的路徑>,其中 <MathFuncsDll.dll 檔案的路徑> 應替換為 MathFuncsDll.dll 的實際位置。

  1. 現在,可以在應用程式中使用“MyMathFuncs”類了。 使用以下代碼替換“MyExecRefsDll.cpp”的內容:

複製

// MyExecRefsDll.cpp

// compile with: /EHsc /link MathFuncsDll.lib

 

#include <iostream>

 

#include "MathFuncsDll.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. 確保選擇“MyExecRefsDll”作為預設項目。 在方案總管中,選擇 MyExecRefsDll,然後選擇項目菜單中的設為啟動項目
  2. 若要運行項目,請選擇調試菜單中的開始執行(不調試)。 輸出應該與下面的內容類別似:

複製

a + b = 106.4

a - b = -91.6

a * b = 732.6

a / b = 0.0747475

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.