您的位置:首页 > 其它

动态链接库是如何建立的(2)

2016-04-29 18:40 495 查看

1.不采用def文件的形式创建动态链接库 (基础)

点击此处查看我的另一篇博客:采用def文件创建动态链接库

过程1

(1)创建新的DLL项目 命名DLL

(2)添加cpp文件 命名Dll.cpp

加入了_declspec(dllexport)表明add 和 subtract 为导出函数

对于_stdcall,读者可以自行测试,并查阅相关的资料

_declspec(dllexport) int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
_declspec(dllexport) int /*_stdcall*/  subtract(int a, int b)
{
return a - b;
}


过程2

(1)新建一个检测函数TestDll

(2)添加.cpp文件 TestDll.cpp

(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中

#include <iostream>
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);

_declspec(dllimport) add(int a, int b);
_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}


2.不采用def文件的形式创建动态链接库 (进阶1)

过程1

(1)创建新的DLL项目 命名DLL

(2)添加cpp文件 命名Dll.cpp

_declspec(dllexport) int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
_declspec(dllexport) int /*_stdcall*/  subtract(int a, int b)
{
return a - b;
}


(3)添加h文件 命名Dll.h

此时只是给客户端使用的,即TestDll使用的,所以用_declspec(dllimport),表明是导入

_declspec(dllimport) int /*_stdcall*/ add(int a, int b);
_declspec(dllimport) int /*_stdcall*/  subtract(int a, int b);


过程2

(1)新建一个检测函数TestDll

(2)添加.cpp文件 TestDll.cpp

(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中

(4)#include “*/Dll.h”//加上之后才可以

#include <iostream>
#include "*/Dll.h"//加上之后才可以
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);

//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}


3.不采用def文件的形式创建动态链接库 (进阶2)

过程1

(1)创建新的DLL项目 命名DLL

(2)添加cpp文件 命名Dll.cpp

#define DLL_API _declspec(dllexport)
#include "Dll1.h"
int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
int /*_stdcall*/  subtract(int a, int b)
{
return a - b;
}


(3)添加h文件 命名Dll.h

#ifdef DLL_API
#else
#define DLL_API _declspec(dllimport)
#endif
DLL_API int /*_stdcall*/ add(int a, int b);
DLL_API int /*_stdcall*/  subtract(int a, int b);


过程2

(1)新建一个检测函数TestDll

(2)添加.cpp文件 TestDll.cpp

(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中

(4)#include “*/Dll.h”//加上之后才可以

#include <iostream>
#include "*/Dll.h"//加上之后才可以
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);

//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}


4.不采用def文件的形式创建动态链接库 (进阶3)

过程1

(1)创建新的DLL项目 命名DLL

(2)添加cpp文件 命名Dll.cpp

#define DLL_API extern "C" _declspec(dllexport)//注意C要大写
#include "Dll1.h"
int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
int /*_stdcall*/  subtract(int a, int b)
{
return a - b;
}


(3)添加h文件 命名Dll.h

#ifdef DLL_API
#else
#define DLL_API extern "C" _declspec(dllimport)
#endif
DLL_API int /*_stdcall*/ add(int a, int b);
DLL_API int /*_stdcall*/  subtract(int a, int b);


过程2

(1)新建一个检测函数TestDll

(2)添加.cpp文件 TestDll.cpp

(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中

(4)#include “*/Dll.h”//加上之后才可以

#include <iostream>
#include "*/Dll.h"//加上之后才可以
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);

//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
system("pause");
return OK;
}


5.不采用def文件的形式创建动态链接库 (进阶4)

过程1

(1)创建新的DLL项目 命名DLL

(2)添加cpp文件 命名Dll.cpp

#define DLL_API  _declspec(dllexport)
#include "Dll1.h"
DLL_APPI int /*_stdcall*/ add(int a, int b)
{
return a + b;
}
DLL_API int /*_stdcall*/  subtract(int a, int b)
{
return a - b;
}
void Line:: output()
{
cout<<"void Line:: output()"<<endl;
}
void Line::test()
{
cout<<"void Line::test()"<<endl;
}


(3)添加h文件 命名Dll.h

#ifdef DLL_API
#else
#define DLL_API  _declspec(dllimport)
#endif
int /*_stdcall*/ add(int a, int b);
int /*_stdcall*/  subtract(int a, int b);
class DLL_API Line
{
public:
void output();
void test();
}


过程2

(1)新建一个检测函数TestDll

(2)添加.cpp文件 TestDll.cpp

(3)需要把Dll1的lib和dll文件拷贝到TestDll工程中

(4)#include “*/Dll.h”//加上之后才可以

#include <iostream>
#include "*/Dll.h"//加上之后才可以
using namespace std;
#pragma comment(lib,"Dll.lib")
//extern 与 _declspec(dllimport)效果一样,最好用_declspec(dllimport)
//extern add(int a, int b);
//extern subtract(int a, int b);

//_declspec(dllimport) add(int a, int b);
//_declspec(dllimport) subtract(int a, int b);
#define OK 0
#define ERR -1
int main()
{
int a = 100, b = 40;
cout << "add(" << a << "," << b << ")" <<add(a,b)<< endl;
cout << "subtract(" << a << "," << b << ")" << subtract(a, b) << endl;
Line line;
line.output();
line.test();
system("pause");
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息