Win32中 DLL、Lib 库的创建机器使用
Windows 下 的静态库和动态库
一、静态函数库(Lib)
1. 静态函数库的制作(C/C++)
—— 打开新建项目,然后选中Win32项目,接着在创建项目中选择 Lib,再接着将函数、实现功能的代码写入文件中,最后点击生成 目标文件 (.lib文件)
—— 生成的目标文件(Lib)默认在解决方案中的Debug目录下
2 . 静态函数库的调用
在Win32项目中调用步骤如下:
i. 声明调用目标函数
ii. 给链接器 指定链接库的 类型、库相对位置 —— #pragma comment(lib,''../Debug/CLib.lib'')
二、动态函数库(Dll)
1. 动态函数库的制作(C/C++)
—— 打开新Win32项目,选中Dll 选项,向目标文件写 函数实现代码,最后点击生成
制作动态库步骤:
i. 创建动态库项目
ii. 添加库程序
iii. 库程序导出 —— declspec(dllexport) + 库函数
—— 生成的动态库位置在解决方案中Debug目录下
2. 动态库的使用
i. 声明并导入动态库函数 —— declspec(dllimport)+ 库函数
链接时会生成相应的静态库文件,保存着函数中的编号, 方便能够准确找到函数
ii. 导入函数库 —— #pragma comment(lib,"../Debug/CppLib.lib") //编译器去静态库找编号
iii. 在程序中使用函数
iv. —— 隐式链接的情况,Dll文件可以放在以下路径中
1. 与执行文件 在同一个目录下
2. 当前工作目录
3. Windows目录
4. Windows/System32目录
5.Windows/System
6.环境变量PATH指定目录
—— 显示链接
链接步骤:
1. 定义函数指针类型 typedef
typedef int (*DLL_ADD) (int m,int n);
2. 加载动态库
HMODULE LoadLibrary(LPCTSTR lpFileName //动态库路径);返回dll的实例句柄(HINSTANCE))
3. 获取函数地址
FARPROC GetProcAddress(HMODULE hModule// Dll句柄, LPCSTR lpProcName//函数名); 成功返回函数地址
4.使用函数
5. 卸载动态库
BOOL FreeLibrary(HMODULE hModule);
导出类
头文件:
#ifndef __DLLCLASS_H
#define __DLLCLASS_H
#ifdef DLLCLASS_EXPORTS
#define EXT_CLASS _declspec(dllexport)
#else
#define EXT_CLASS _declspec(dllimport)
#endif
class EXT_CLASS CMath { };
cpp文件
#define DLLCLASS_EXPORTS
#include "DllClass.h"
int CMath::Add (int num1, int num2);
应用程序要运行动态库里的文件,会先检查所需文件是否能够找到并无错误,再才会跑起应用程序
Win32中 DLL、Lib 库的创建机器使用的更多相关文章
- VS2010中添加lib库引用
VS2010中添加lib库引用: 1 菜单 项目---> 属性--->配置属性-->链接器---->输入---附加依赖项, 加入库名,如: my_API.lib; 或是在c ...
- [转]用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口
原文链接: 1.用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2.Windows MFC 两个OpenGL窗口显示与线程RC问题
- DLL动态库的创建,隐式加载和显式加载
动态库的创建 打开VS,创建如下控制台工程,工程命名为DllTest: 在弹出的对话框中选择"DLL"后单击"完成"按钮: 在工程中新建DllTest.h和Dl ...
- 在VS中添加lib库的三种方法
注意: 1.每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Prop ...
- 45.QT-连接外部dll,lib库导入问题
dll库问题 查看MZ_Card.dll对应的文档手册,如下图所示: 所以代码写为: typedef BOOL (*Fun)(BOOL IsOpenComm,unsigned long Port, u ...
- 在vs2005中添加lib库的方法
方法一:在用到lib的地方加上 //强烈推荐这种方法.#pragma comment(lib,"libname.lib") 方法二: 点击菜单命令 “项目/属性”, ...
- lib库dll库的使用方法与关系
一.lib库 lib库有两种:一种是静态lib(static Lib),也就是最常见的lib库,在编译时直接将代码加入程序当中.静态lib中,一个lib文件实际上是任意个obj文件的集合,obj文件是 ...
- vs2008设置dll、lib库的输出路径
vs2008中,有些项目上的功能是要生产库文件给其他项目调用的,以下是一些设置库文件(x.dll和x.lib)输出路径的方法. 设置x.dll 输出路径方法是在右键项目的"属性"- ...
- MFC中的DLL、LIb文件的创建、使用
动态链接库Dynamic-Linked Lib 的创建与使用 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL),是微软公司在微软 ...
随机推荐
- VB Socket编程 框架
[转载]VB Socket编程 框架 (2014-07-15 20:06:28) 转载▼ 标签: 转载 原文地址:VB Socket编程 框架作者:安静的浪花 VB Socket编程(Winsoc ...
- 一个尖括号能干什么,画一个笑脸开始(为了支持交互,它又增添了JavaScript。HTML页面也越来越臃肿。于是CSS便诞生了。API和核心代码的出现使HTML能够访问更复杂的软件功能--支持更高级的交互和云服务集成。这就是今天的HTML5)
一个尖括号 < 一个尖括号能干什么 < ? 你可以编出一顶帽子 <(:-p 或一张笑脸 :-> 再或者更直接一些 20世纪90年代初,html作为一种简单标记语言面世,用于在互 ...
- go语言笔记——go环境变量goroot是安装了路径和gopath是三方包路径
Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们.如果你使用的是 Windows 的话,你完全不用进行手动设置,Go 将被默认安装在目录 c:/go ...
- Spring -> Spring Boot > Spring Cloud
这几天刚刚上班,公司用的是Spring Cloud,接触不多.我得赶快学起来. 想学习就必须得知道什么是微服务,什么是Spring Boot,什么是Spring Cloud,以及两者之间有什么关系? ...
- python配置文件编写
from configparser import ConfigParser # 配置类,专门来读取配置文件# 配置文件结尾:.ini .conf .config .properties .xml# 配 ...
- JS中的this是什么,this的四种用法
在Javascript中,this这个关键字可以说是用的非常多,说他简单呢也很简单,说他难呢也很难,有的人开发两三年了,自己好像也说不清this到底是什么.下面我们来看看: 1.在一般函数方法中使用 ...
- HTML--使用单选框、复选框,让用户选择
在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看 ...
- Maven密码加密
第1步执行shell: mvn --encrypt-master-password "SomeMadeUpMasterPassword" {nDpn1bE1vX4HABCDEFG ...
- System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) .
今天使用sql server 2008 R2管理器,进行SQL查询时,频率非常高的报错: System.Data.SqlClient.SqlException: 在向服务器发送请求时发生传输级错误. ...
- 8.Layers Editor
图层编辑 Ventuz5中有两种类型的场景,分别是2D图层和3D图层.3D图层包含Content和Hierarchy,而2D图层只包含Content.默认情况下,图层编辑器显示在Ventuz中的左上角 ...