動(dòng)態(tài)庫(kù):
1.新建win32控制臺(tái)應(yīng)用程序DLLTEST,,選中DLL(D)、預(yù)編譯頭(P)、導(dǎo)出符號(hào)(X),、自動(dòng)生成了如下文件:
//DLLTEST.h文件
// 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
// 宏的標(biāo)準(zhǔn)方法,。此 DLL 中的所有文件都是用命令行上定義的 DLLTEST_EXPORTS
// 符號(hào)編譯的。在使用此 DLL 的
// 任何其他項(xiàng)目上不應(yīng)定義此符號(hào),。這樣,,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
// DLLTEST_API 函數(shù)視為是從 DLL 導(dǎo)入的,而此 DLL 則將用此宏定義的
// 符號(hào)視為是被導(dǎo)出的,。
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif
// 此類是從 DLLTEST.dll 導(dǎo)出的
class DLLTEST_API CDLLTEST {
public:
CDLLTEST(void);
// TODO: 在此添加您的方法,。
};
extern DLLTEST_API int nDLLTEST;
DLLTEST_API int fnDLLTEST(void);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
//DLLTEST.cpp文件
// DLLTEST.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù)。
//
#include "stdafx.h"
#include "DLLTEST.h"
// 這是導(dǎo)出變量的一個(gè)示例
DLLTEST_API int nDLLTEST=0;
// 這是導(dǎo)出函數(shù)的一個(gè)示例,。
DLLTEST_API int fnDLLTEST(void)
{
return 42;
}
// 這是已導(dǎo)出類的構(gòu)造函數(shù),。
// 有關(guān)類定義的信息,請(qǐng)參閱 DLLTEST.h
CDLLTEST::CDLLTEST()
{
return;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
2.類比著添加自定義的變量,、函數(shù)和類,,具體如下:
//DLLTEST.h文件
// 下列 ifdef 塊是創(chuàng)建使從 DLL 導(dǎo)出更簡(jiǎn)單的
// 宏的標(biāo)準(zhǔn)方法。此 DLL 中的所有文件都是用命令行上定義的 DLLTEST_EXPORTS
// 符號(hào)編譯的,。在使用此 DLL 的
// 任何其他項(xiàng)目上不應(yīng)定義此符號(hào),。這樣,源文件中包含此文件的任何其他項(xiàng)目都會(huì)將
// DLLTEST_API 函數(shù)視為是從 DLL 導(dǎo)入的,,而此 DLL 則將用此宏定義的
// 符號(hào)視為是被導(dǎo)出的,。
#ifdef DLLTEST_EXPORTS
#define DLLTEST_API __declspec(dllexport)
#else
#define DLLTEST_API __declspec(dllimport)
#endif
#include <iostream>
using namespace std;
// 此類是從 DLLTEST.dll 導(dǎo)出的
class DLLTEST_API CDLLTEST { //導(dǎo)出的類
public:
CDLLTEST(void);
// TODO: 在此添加您的方法。
int mul(int x, int y);
double b;
};
class DLLTEST_API MyDLL {
public:
int a;
MyDLL();
int add(int x, int y);
};
extern DLLTEST_API int nDLLTEST; //導(dǎo)出的變量
extern DLLTEST_API double mydll;
DLLTEST_API int fnDLLTEST(void); //導(dǎo)出的函數(shù)
DLLTEST_API int sub(int x, int y);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
//DLLTEST.cpp文件
// DLLTEST.cpp : 定義 DLL 應(yīng)用程序的導(dǎo)出函數(shù),。
#include "stdafx.h"
#include "DLLTEST.h"
// 這是導(dǎo)出變量的一個(gè)示例
DLLTEST_API int nDLLTEST=0;
DLLTEST_API double mydll = 0.999;
// 這是導(dǎo)出函數(shù)的一個(gè)示例,。
DLLTEST_API int fnDLLTEST(void)
{
return 42;
}
DLLTEST_API int sub(int x, int y)
{
return x - y;
}
// 這是已導(dǎo)出類的構(gòu)造函數(shù)。
// 有關(guān)類定義的信息,,請(qǐng)參閱 DLLTEST.h
CDLLTEST::CDLLTEST()
{
b = 0.111;
return;
}
int CDLLTEST::mul(int x, int y)
{
return x * y;
}
MyDLL::MyDLL()
{
a = 555;
cout << "this is the constructor of my DLL!" << endl;
}
int MyDLL::add(int x, int y)
{
return x + y;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
3.分別在debug和release模式下生成庫(kù)文件DLLTEST.dll和DLLTEST.lib.
4.新建測(cè)試工程:win32控制臺(tái)應(yīng)用程序Test,將debug(release下同樣)模式下生成的庫(kù)文件DLLTEST.dll復(fù)制到測(cè)試工程目錄下,,
將生成的庫(kù)文件DLLTEST.lib和頭文件DLLTEST.h復(fù)制到測(cè)試工程下的新建目錄DLLTEST下,,添加main.cpp文件,
測(cè)試代碼如下:
#include <iostream>
using namespace std;
#include "DLLTEST\DLLTEST.h"
#pragma comment(lib,"DLLTEST\\DLLTEST.lib")
int main() {
CDLLTEST cd;
cout << "CDLLTEST -> b = " << cd.b << endl;
cout << "CDLLTEST -> mul(2, 3) = " << cd.mul(2, 3) << endl;
MyDLL md;
cout << "MyDLL -> a = " << md.a << endl;
cout << "MyDLL -> add(2, 3) = " << md.add(2, 3) << endl;
cout << "DLL:mydll = " << mydll << endl;
cout << "DLL:nDLLTEST = " << nDLLTEST << endl;
cout << "DLL:fnDLLTEST = " << fnDLLTEST() << endl;
cout << "DLL:sub(2, 3) = " << sub(2, 3) << endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
5.運(yùn)行,,輸出如下ok:
CDLLTEST -> b = 0.111
CDLLTEST -> mul(2, 3) = 6
this is the constructor of my DLL!
MyDLL -> a = 555
MyDLL -> add(2, 3) = 5
DLL:mydll = 0.999
DLL:nDLLTEST = 0
DLL:fnDLLTEST = 42
DLL:sub(2, 3) = -1
靜態(tài)庫(kù):
1.新建靜態(tài)庫(kù)工程LIBTEST,,添加代碼如下:
//LIBTEST.h
#pragma once
class LIBTEST
{
public:
LIBTEST();
int add(int x, int y);
~LIBTEST();
};
//LIBTEST.cpp
#include "LIBTEST.h"
LIBTEST::LIBTEST()
{
}
int LIBTEST::add(int x, int y)
{
return x + y;
}
LIBTEST::~LIBTEST()
{
}
2.分別在debug和release模式下生成庫(kù)文件LIBTEST.lib,將debug下生成的庫(kù)文件修改名字為L(zhǎng)IBTESTd.lib.
3.將庫(kù)文件LIBTEST.lib,、LIBTESTd.lib和頭文件LIBTEST.h拷貝到測(cè)試工程目錄下,,編寫測(cè)試程序
// main.cpp
#include <iostream>
#include "LIBTEST/LIBTEST.h"
#ifdef _DEBUG
#pragma comment(lib, "LIBTEST/LIBTESTd.lib")
#else
#pragma comment(lib, "LIBTEST/LIBTEST.lib")
#endif //
using namespace std;
int main() {
LIBTEST lt;
cout << lt.add(1, 2) << endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
4.分別在debug和release模式下運(yùn)行即ok.
|