VS2010 動態庫開發——第一章演練:創建和使用動態鏈接庫 (C++)

VS2010 動態庫開發——第一章演練:創建和使用動態鏈接庫 (C++)

(標題超鏈接即原文地址)

Visual Studio 2010 其他版本 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);
};
}
3.請注意此代碼方法聲明中的 __declspec(dllexport) 修飾符。 這些修飾符使 DLL 能夠導出該方法以供其他應用程序使用。 有關更多信息,請參見 dllexport, dllimport。

4.若要爲新類創建源文件,請從“項目”菜單中選擇“添加新項…”。 將顯示“添加新項”對話框。在“類別”窗格中,選擇“Visual C++”下的“代碼”。 在“模板”窗格中,選擇“C++ 文件(.cpp)”。爲源文件選擇一個名稱,如 MathFuncsDll.cpp,並單擊“添加”。 將顯示一個空白文件。

5.在源文件中實現“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;
}
}
6.若要將項目生成爲 DLL,請從“項目”菜單中選擇 MathFuncsDll“屬性...”。在左窗格中,選擇“配置屬性”下的“常規”。 在右窗格中,將“配置類型”更改爲“動態庫(.dll)”。 單擊“確定”保存更改。

注意
如果您從命令行生成項目,請使用 /LD 編譯器選項指定輸出文件應爲 DLL。 有關更多信息,請參見 /MD、/MT、/LD(使用運行庫)。

7.編譯該動態鏈接庫,方法是選擇“生成”菜單中的“生成解決方案”。 這樣就創建了一個可供其他程序使用的 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 的實際位置。

6.現在,可以在應用程序中使用“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;

system("pause");

return 0;
}
7.通過從“生成”菜單中選擇“生成解決方案”,生成可執行文件。

運行應用程序
1.確保選擇“MyExecRefsDll”作爲默認項目。 在“解決方案資源管理器”中,選擇 MyExecRefsDll,然後選擇“項目”菜單中的“設爲啓動項目”。

2.若要運行項目,請選擇“調試”菜單中的“開始執行(不調試)”。

運行結果:

a + b = 106.4
a - b = -91.6
a * b = 732.6
a / b = 0.0747475

發佈了47 篇原創文章 · 獲贊 178 · 訪問量 56萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章