程序运行的四个阶段:预处理,编译,汇编,链接
静态库(lib):在链接阶段,将代码完整的拷贝到可执行程序
动态库(dll):在链接阶段,将引入库(.lib,存储的为函数名和位置)拷贝到可执行程序
一 . 静态库:
以C语言的形式生成库.h中
extern "C" int add(int ,int);extern "C" int sub(int ,int);
二. 测试静态库:(将.h和.lib放入)
.h
#ifdef __cplusplus//c++程序员用c的方式打开extern "C" int add(int ,int);extern "C" int sub(int ,int);#else //c的程序员直接打开int add(int ,int);int sub(int ,int);#endif
源.cpp
#include#include "stdafx.h"//声明using namespace std;#pragma comment(lib,"静态库.lib")//在链接阶段,导入静态库(方法一)int main(){ cout< <
导入静态库(方法二):右键->属性->链接器->输入->静态库.lib
三. 动态库:
两种导出方式:
1. 源文件右键添加新建项 代码 模块定义文件LIBRARY "动态库.dll"EXPORTSadd @1sub @22. 在要导出的函数位置前加_declspec(dllexport)
四 . 测试动态库(导入.lib和.dll(.dll要与.exe在同一目录文件下))
两种加载方式:
1.隐式加载:#pragma comment(lib,"0305动态库.lib")
#include#include "mydll.h"using namespace std;//引入库 --隐式加载#pragma comment(lib,"0305动态库.lib")int main(){ cout< <
2.显示加载
#include#include using namespace std;typedef int (*PFUN)(int,int);int main(){ //显示运行时加载 //1.加载库 HMODULE hmodule = LoadLibrary(L"../debug/0305动态库.dll"); //2.获得库函数的地址 if(hmodule) { PFUN pfun = (PFUN)GetProcAddress(hmodule,"add"); cout<<(*pfun)(2,3)<
更新:
只更新函数实现时,只需将.dll重新复制
更改函数名和导出方式时,需要将.dll和.lib重新复制