博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
库(静态库和动态库)
阅读量:7008 次
发布时间:2019-06-27

本文共 1345 字,大约阅读时间需要 4 分钟。

程序运行的四个阶段:预处理,编译,汇编,链接

静态库(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"
EXPORTS
add @1
sub @2

2. 在要导出的函数位置前加_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重新复制

转载于:https://www.cnblogs.com/Lune-Qiu/p/8515462.html

你可能感兴趣的文章
2016-05-27
查看>>
深入了解java HashMap的死循环
查看>>
WordPress数据库管理插件:WP-DBManager
查看>>
WordPress条件标签(Conditional Tags)实现页脚js动态加载
查看>>
android短信发送器
查看>>
Vue项目webpack打包部署到Tomcat
查看>>
mac安装redis管理工具rmd
查看>>
struts 2 监听器
查看>>
更简单的用 Emacs 连接 maven 启动的 clojure:swank 服务端
查看>>
国内最火的五款HTML5前端开发框架
查看>>
javaweb 进阶之路
查看>>
CGLib动态代理原理及实现
查看>>
selenium模拟鼠标悬停操作
查看>>
mysql事务,select for update,及数据的一致性处理
查看>>
java8-Lambda
查看>>
Bash 实例,第 2 部分
查看>>
eclipse JavaEE版"javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法...
查看>>
【crowdin】快速国际化
查看>>
CSS3实现背景颜色渐变 摘抄
查看>>
CentOS 6.8 安装vnc
查看>>