隐式链接
一、
1,创建win32 dll工程
_declspec(dllexport) int add(int a,int b)
{
return a+b;
}
_declspec(dllexport) int sub(int a,int b)
{
return a-b;
}
编译会生产lib和dll两个文件,lib是引入文件,主要记录dll文件的函数的一些信息,在连接的时候需要用到lib文件,dll文件时运行的时候需要使用。
2,在其他地方使用动态链接库,需要将lib和dll文件拷贝到当前工程目录下,
连接器中加入lib文件
在代码中(说明这两个函数是在外部dll中定义的):
extern int add(int a,int b);
extern int sub(int a,int b);
也可以使用(这样效率更高)
_declspec(dllimport) int add(int a,int b);
_declspec(dllimport) int sub(int a,int b);
3,使用:
int a=add(1,2);
4,为了方便别人调用,我们可以给动态链接库提供一个头文件,方便别人知道我们dll中有哪些函数
头文件TestDll.h
_declspec(dllimport) int add(int a,int b);
_declspec(dllimport) int sub(int a,int b);
那么步骤2可以省略,直接在使用动态链接库的工程中引入该头文件即可
二、
让动态链接库的源文件既可以被调用者使用,也可以让dll自己使用
TestDll.h
#ifdef DLL_API
//什么也不做
#else
#define DLL_API _declspec(dllimport)
#endif
DLL_API int add(int a,int b);
DLL_API int sub(int a,int b);
TestDll.cpp
#define DLL_API _declspec(dllexport)
#include "TestDll.h"
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
{
return a-b;
}
导出类
class DLL_API Message
{
public:
void showMessage();
};
在需要调用的类中就引入头文件就可以直接Message msg创建对象;