有些时候,我们想写自己的函数库以避免重复写代码,此文介绍如何使用Visual Studio编写,生成和调用自己的动态链接库。本文中采用隐式调用方式来调用动态链接库。

0,实验环境说明:

集成开发环境:Visual Studio 10.0

操作系统: Windows 10

语言:C/C++

1,编写自己的DLL

我们分两部分介绍如何完成编写生成自己的DLL库。

1.1,环境搭建

介绍如何使用Visual Studio建立一个DLL工程,以及额外的配置。

首先,建立一个dll的空工程,如下图所示:

添加两个文件,一个头文件(mydll.h),一个源文件(mydll.cpp),文件名根据自己的需要命名,这里并不需要写死文件名。

特别注意项目属性中是否存在类似如下图所示的内容,若无红框标记的宏,请添加合适的宏,例如MYDLL_EXPORT,一般以库形式建立的项目都会有类似的宏。

1.2,代码说明

向.h文件中添加如下内容:

#ifndef __MY_DLL_H__
#define __MY_DLL_H__
#if (defined WIN32 || defined _WIN32 || defined WINCE) && defined MYDLL_EXPORTS
#  define AB_EXPORTS __declspec(dllexport)
#else
#  define AB_EXPORTS
#endif
AB_EXPORTS void func();
#endif

上面的代码中,func就是我们自己定义的函数。

向.cpp文件中添加如下代码:

#include "mydll.h"
#include <iostream>
void func(){std::cout << "hello func \n";
}

执行生成命令之后,在生成目录下回出现如下的内容:

2,测试自己编写的DLL

添加一个Win32 Consol Application空项目,向新项目中添加cpp代码文件,并加入如下代码:

#include "mydll.h"
#include <iostream>
using namespace std;
int main(){func();return 0;
}

然后按如下图所示配置。

这一步保证.h头文件可以被找到,保证编译的正常进行。

这两步是为了保证.lib文件可以被找到,保证了链接的正常进行。

然后便是build生成解决方案,这一步应该可以正常生成。

把两个项目放在同一个解决方案中就能够成功,因为两个项目生成的文件.exe,.dll都在项目的debug目录下, 若果不在同一个解决方案下,就需要手动复制.dll文件了

为了运行的成功,需要把mydll.dll文件复制到项目工作目录下(在VS中调试运行),或者放在项目的debug目录下(VS中调试运行以及生成的可执行文件.exe运行)。

Ctrl + F5执行!如下图所示执行结果:

总结

本文主要讨论了如何使用Visual Studio创建自己的dll,用例子阐述了这个过程,结果表明文中的方法可行。

为深入理解,请参考本博客的其他系列。

例子参考:https://blog.csdn.net/bendanban/article/details/42808027

C++编写、生成、调用动态链接库相关推荐

  1. Qt生成调用动态链接库dll

    把编译好的包含函数和变量的目标代码存储到文件中,在链接的时候让链接程序自动从文件中查找需要的代码.这个文件就是链接库,又可以分为静态链接库和动态链接库. 1. 静态链接库 链接程序从库中寻找需要的符号 ...

  2. 动态链接库的编写与调用

    动态链接库是编绎好的二进制文件与exe文件类似,但它不能单独运行.它是一个独立的模块,也包含了代码.数据或资源,能被其它程序共享.多个程序调用动态链接库里的同一个函数时,理论上该函数在内存中只存在一份 ...

  3. JAVA调用动态链接库

    上一篇<JAVA本地接口(JNI)>中介绍了JAVA的JNI技术,通过JAVA自有的方式调用动态链接库,这一篇将继续为大家介绍使用其他方式调用动态链接库. 首先,我们编写一个用于测试的链接 ...

  4. VS2019 - 动态库的编写和调用

    VS2019 - 动态库的编写和调用 完善自己知识体系的一些内容: 用C++编写的DLL(动态链接库)中,导出类的接口封装方法总结 详解dll的封装,以及三种调用方法(将±×÷封装为例) 1 VS20 ...

  5. 动态库的编写和调用 - Delphi

    uDll.pas   function Add10(ANum: integer): integer; stdcall; //Delphi 默认采用 register 调用约定,如果dll涉及跨语言调用 ...

  6. VC++6.0如何创建与调用动态链接库(dll)

    VC++支持的DLL: DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库.MFC规则DLL和MFC扩展DLL.DLL导出函数(或变量.类)可供应用程 ...

  7. python调用动态链接库传送protobuf数据。

    什么是protobuf protobuf是Google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多.开发者定义类似于 ...

  8. Unity调用动态链接库dll和so

    [001]Unity调用动态链接库dll和so  ApolloAR https://www.jianshu.com/p/f37bb72979a1 一.PC平台 (注:环境 VS2017+Unity20 ...

  9. Python 调用动态链接库

    Python 调用动态链接库 ctypes是Python调用c的动态链接库的一个内置模块. 通过 CMake 构建动态链接库 项目结构 ├── CMakeLists.txt # CMake 构建配置文 ...

最新文章

  1. pandas读取csv文件的前几行数据(nrows参数)、pandas读取csv文件的中间几行数据(skiprows=range(a,b))
  2. 纪念计算机之父阿兰·图灵诞辰109周年
  3. html5离线保存需要联网吗,html5 离线存储
  4. PAT-B wifi密码(非常巧妙)
  5. 查看maven,JDK版本号
  6. 玩盲盒的泡泡玛特,美妆零售盒里究竟藏有什么“秘密”?
  7. 微信小程序商城有发展机会吗?
  8. Leetcode 1284 Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
  9. 电子元器件采购需要掌握哪些基础知识?
  10. 单页面应用与多页面的区别与优缺点
  11. 一招解决 npm i 安装 node-sass 出现错误
  12. 时光金科php_发布中国首个社区敬老宣言,共敬美好岁月-金科全国首届重阳敬老节温暖落幕...
  13. 基于java的宠物管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
  14. 串行通信 - Modbus协议
  15. strcpy()、strncpy()函数
  16. 多校训练2 F Girlfriend 数论(球冠)
  17. 别混淆数据争用(data race) 和竞态条件(race condition)
  18. BC20 常用AT指令(MQTT相关)
  19. 遗传算法原理简介及其MATLAB实践
  20. 在线图书推荐网 Python+Django+Mysql开发技术 个性化图书推荐系统 协同过滤推荐算法在图书网站中的运用 基于用户、物品的协同过滤推荐算法 个性化推荐算法、机器学习、分布式大数据、人工智

热门文章

  1. JavaScript简餐——代理Proxy与反射(一)
  2. 更新啦!第 59 期《HelloGitHub》开源月刊
  3. sim卡没坏但苹果手机无服务_解决手机插SIM卡后都显示“无SIM卡”的故障问题
  4. element ui +mybatisPlus分页插件实现分页功能
  5. 安装cnpm后,提示cnpm不是内部命令
  6. win10 和安卓平板分屏Spacedesk
  7. java之类的定义和对象的创建
  8. 超全的Matplotlib速查表,打包下载
  9. RewriteCond判断QUERY_STRING为空的写法?Apache Rewrite解决问号匹配的写法
  10. Java中Map集合遍历的三种方法