DLL的建立和使用(含程式碼)
初次接觸DLL檔案的使用,在網上找了許多教程自己學習,多謝網上的許多大神的帖子。現在將這些總結一下寫出來也是對自己的一個提高
1.DLL建立方法
1. 開啟VS2010,點選檔案->新建->專案
2. 點選已安裝模版->Visual C++->Win32專案,填寫名稱及解決方案名稱
3. 點選下一步,應用程式選擇DLL,附加選項選擇空專案
4. 將生成一個空工程,在標頭檔案新增新建項選擇標頭檔案(.h),輸入名稱testdll,原始檔選擇新增新建項選擇C++檔案(.CPP),輸入名稱testdll
5. 在testdll.h檔案填寫下面程式碼:
namespace MathFuncs
{
class MyMathFuncs
{
public:
__declspec(dllexport)double Add(doublea,double b);
__declspec(dllexport)double Subtract(doublea,double b);
__declspec(dllexport)double Multiply(doublea,double b);
__declspec(dllexport)double Divide(doublea,double b);
};
}
或者
namespace MathFuncs
{
class __declspec(dllexport) MyMathFuncs
{
public:
double Add(double a,double b);
double Subtract(doublea,double b);
double Multiply(doublea,double b);
double Divide(doublea,double b);
};
}
上述兩種方式的區別在於第一種可以指定類中那些成員函式可以被其他程式呼叫,第二種方式類中所有成員函式都可以被其他程式呼叫
6. 在testdll.cpp檔案裡面新增如下程式碼:
// testdll.cpp
#include "testdll.h"
namespace MathFuncs
{
double MyMathFuncs::Add(doublea,double b)
{
return a + b;
}
double MyMathFuncs::Subtract(doublea,double b)
{
return a - b;
}
double MyMathFuncs::Multiply(doublea,double b)
{
return a * b;
}
double MyMathFuncs::Divide(doublea,double b)
{
return a / b;
}
}
7. 點選生成解決方案,轉到工程目錄下可以看到在Debug目錄下有testdll.lib和testdll.dll兩個檔案,在其他專案裡面我們要用到的油三個檔案testdll.lib,testdll.dll和testdll.h
2.DLL使用
1. 新建一個空工程,新增原始檔mian.cpp,在裡面新增如下程式碼:
#include <stdio.h>
#include <Windows.h>
#include "testdll.h"
using namespace MathFuncs;
void main()
{
MyMathFuncsst;
double c=st.Add(3.0,5.0);
printf("%f\n",c);
system("pause");
}
或者
#include <stdio.h>
#include <Windows.h>
#include "testdll.h"
void main()
{
double c=MathFuncs::MyMathFuncs::Add(3.0,5.0);
printf("%d\n",c);
system("pause");
}
第二種方法需要在類的定義中使用靜態函式
static __declspec(dllexport)doubleAdd(double a,doubleb);
否則需要例項化一個類的物件再呼叫類中函式
2. 將testdll.lib和testdll.h放到工程預設目錄下,即CPP檔案所在的目錄,點選專案->屬性->配置屬性->連結器->輸入->附加依賴相,填寫testdll.lib,若把testdll.lib和testdll.h放到Debug目錄下,則填寫..\Debug\testdll.lib
3. 將testdll.dll放入cpp檔案所在位置或者Debug目錄下都可以,若把testdll.h檔案放在其他地方則在標頭檔案地方手動新增進來即可,或者點選專案->屬性->配置屬性->C/C++->常規->附加包含目錄,新增標頭檔案所在目錄
注:若提示DLL檔案讀取錯誤而路徑包含等都沒有問題,則可以刪除附加依賴項,在程式頭加入#pragmacomment(lib , "testdll.lib")即可。