windows库的创建和使用:静态库+动态库

一、静态库的创建和使用

1. 静态库创建

(1)首先创建projecttest,測试代码例如以下:

1) test.h

void test_print();

2) test.cpp

#include "test.h"

#include <stdio.h>

void test_print()

{

printf("test_print in static lib.");

}

3)右击projecttest:属性——>配置属性——>常规——>配置类型:选择静态库lib

4)编译project(build),然后会在解决方式里的Debug下会生成test.lib。

2. 使用静态库 = lib文件 + 头文件

1)建一个新的projectuselib

2)点击资源文件——>加入已有项——>加入刚才生成的库test.lib

3)右击属性——>VC++文件夹——>包括文件夹:将test.h所在文件夹加入进来

project代码例如以下:

1)main.cpp

#include "test.h"

#include<stdio.h>

int main()

{

test_print();

getchar();

}

调试就能看到调用成功。

二、 动态库的创建与使用

1. 静态载入动态库

1)创建projectstatic_load

static_dll.h

//导出类

class __declspec(dllexport) static_test

{

public:

void print();

};

//导出函数

__declspec(dllexport) void static_function();

//导出对象

extern __declspec(dllexport) static_test  static_ObjTest;

static_dll.cpp

#include "static_dll.h"

#include <stdio.h>

void static_test::print()

{

printf("static_test::print() in static load dll.\n");

}

void static_function()

{

printf("static_function in static load dll.\n");

}

static_test  static_ObjTest;

__declspec(dllexport)表示作为动态库的导出项。否则会找不到变量或者函数或者类等。

配置类型选择:动态库(dll).

2)静态载入的方式使用动态库

首先创建一个dll.h

//导入类

class __declspec(dllimport) static_test

{

public:

void print();

};

//导入函数

__declspec(dllimport) void static_function();

//导入对象

extern __declspec(dllimport) static_test  static_ObjTest;

__declspec(dllimport)表明该项是从动态库导入的外部导入项。

创建一个測试projectuselib

main.cpp

#include "dll.h"

#include<stdio.h>

int main()

{

static_test st;

st.print();

static_function();

static_ObjTest.print();

getchar();

}

同一时候须要将static_load.lib和static_load.dll放到同一文件夹下,且.lib文件导入到资源文件下。

2 动态载入动态库

1. 为差别对待这里建立projectdynamic_load

dynamic_dll.h

//导出类

class __declspec(dllexport) dynamic_test

{

public:

void print();

};

//导出函数

__declspec(dllexport) void dynamic_function();

//导出对象

extern __declspec(dllexport) dynamic_test  dynamic_ObjTest;

dynamic_dll.cpp

#include "dynamic_dll.h"

#include <stdio.h>

void dynamic_test::print()

{

printf("dynamic_test::print() in dynamic load dll.");

}

void static_function()

{

printf("dynamic_function in dynamic load dll.");

}

dynamic_test  dynamic_ObjTest;

配置类型选择:动态库(dll).然后编译(build)。

创建一个projectuselib

#include<stdio.h>

#include<Windows.h>

int main()

{

HINSTANCE hDLL = LoadLibraryA("dynamic_load.dll");

if(hDLL==NULL)

{

FreeLibrary(hDLL);

return 0;

}

typedef void(_stdcall*func)();

func f;

f = (func)GetProcAddress(hDLL,"dynamic_function");

if(f) (*f)();

getchar();

}

注意我们必须在LoadLibraryA中传入dll的准确路径,且若使用char*的路径。则使用LoadLibraryA,否则若是unicode则使用LoadLibraryW。至于动态导入类有点麻烦,故在此先不讨论。

有一篇非常好地资料:http://www.cnblogs.com/skynet/p/3372855.html

动态载入dll中的类:http://www.cppblog.com/codejie/archive/2009/09/24/97141.html

windows库的创建和使用:静态库+动态库相关推荐

  1. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库

    Windows系统基于VS2019编译器编译获得VISP动态库 官网地址: Installation from source for Windows with Visual C++ 2019 (vc1 ...

  2. 【Linux后端开发必问】操作系统系列(Linux常用命令、文件权限修改、静态与动态库的制作)

    目录 一.说说常用的Linux命令 二.文件权限如何修改 三.静态库和动态库的制作 1.静态库 2.动态库的制作 3.两者优势对比 一.说说常用的Linux命令 1.cd命令:用于切换当前目录: 2. ...

  3. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库头文件到 Android 工程中 | 配置 CMakeLists.txt 构建脚本 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.配置 CMakeLists.txt 构建脚本 1.导入动态库 2.导入头文件 三.完整 CMakeLists ...

  4. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  5. so库调用java函数_linux下so动态库调用主程序函数

    linux下动态库 今天无意间发现在linux下share object(dynamic library)中的函数竟然可以不通过回调的方式直接访问主程序中的函数,瞬间颠覆以前对于动态库的观念. 1.如 ...

  6. bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理

    动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知 ...

  7. 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序

    目录 找不到.so解决方法 方法一:添加环境变量 方法二:复制so文件到lib路径 方法三:(推荐)添加ldconfig寻找路径 方法四:在编译目标代码时指定该程序的动态库搜索路径 让程序在本目录找到 ...

  8. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )

    文章目录 一.拷贝 p7zip 源码中的头文件到 Android Studio 项目中 二.完整代码示例 1.Java 层代码 2.JNI 层代码 3.日志头文件 4.执行结果 四.参考资料 前置博客 ...

  9. automake生成静态库文件_动手 | 奶奶级的动态库入门

    程序编译过程 库文件 静态链接和动态链接的区别? 从0开始 - 创建和使用静态链接库 创建静态库项目 向静态库中添加文件 编译静态库 创建引用静态库的C++控制台应用 在应用中使用静态库功能 从0开始 ...

  10. linux中查询动态库版本的命令,linux 程序、动态库、静态库内部添加版本号和编译时间详解...

    给程序和库添加版本号和库,有利于维护和升级. 当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本.所以, ...

最新文章

  1. 网站的容错性设计原则
  2. 在CentOS7上配置SVN
  3. ASP.NET4.5Web API及非同步程序开发系列(3)
  4. list取值_Redis中List及quicklist实现-2
  5. 九阴真经战无不胜服务器位置,九阴真经各门派武功风水宝地分类及坐标大全
  6. 计算机专业线性代数教学大纲,《线性代数》课程教学大纲
  7. Qt实践录:一些界面设计的记录示例
  8. pythonstdin_如何在Python中执行将数据写入stdin的进程?
  9. 针对 自制Windows Mobile 文件浏览器的改进
  10. 计算机软件专业代码表,2019-04-09 计算机软件适用的国民经济行业代码表
  11. 大学计算机基础操作题材料,《大学计算机基础》操作题
  12. virtuoso根据原理图绘制版图并联接_virtuoso画原理图
  13. nand2tetris 第二章 布尔运算
  14. python成功安装cartopy之后,调用crs时却出现错误,如何解决
  15. mysql 3306_允许远程链接mysql,开放3306端口
  16. 推文助手! 邀请码!如何填写?
  17. 面试产品经理时如何回答“为什么想做产品经理”这个问题
  18. sql集合.联合查询
  19. hook:实现简单的键盘记录器
  20. 面经—CV秋招40万+offer上岸经验:分享100道CV最新面试题

热门文章

  1. Flink CDC 2.2 正式发布,新增四种数据源,支持动态加表,提供增量快照框架
  2. 新地址 贴吧_建议收藏 | 新媒体人必备5大工具
  3. ea建模 教学_周末特惠:EA促销开启,吉你太美首次打折 + EA旗下多款游戏登陆Steam,EA access即将推出...
  4. docker run -di -p 日志_docker随手笔记第十一节 portainer.io安装使用,比k8s简单
  5. 连续竞价java_Java 方法method
  6. 上海海事大学c语言题库,上海海事大学,C语言试卷6
  7. python3--环境搭建说明;
  8. 椭圆形画画简单图案_十招创意拯救不会画画的你
  9. mysql-proxy 读写分离_mysql 基于mysql-proxy实现读写分离
  10. python存储机制_python学习之内存驻留机制简述