使用api 要先懂得怎么使用dll文件;

1.新建一个常规dll

//dll.h
#ifndef DLL_H
#define DLL_H
#ifdef DLL_EXPORTS
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
DLLEXPORT int add(int ,int);
#endif
//中间一段的意思是: 如果在工程里添加预定义宏DLL_EXPORTS 那DLLEXPORT 就指代__declspec(dllexport) 用于dll的导出(函数 变量 类等)
导出变量用 __declspec(dllexport) int a;
导出函数用 __declspec(dllexport) void foo();
导出类用 class __declspec(dllexport) a{};
如果应用程序需要调用dll中的函数,则需要用__declspec(dllimport)修饰,因此当工程中不包含DLL_EXPORTS预定义时,DLLEXPORT 就指代__declspec(dllimport) 这样生成dll程序和调用dll的程序可以使用同一个头文件
(ps:工程中会自动添加一个DLL_EXPORTS预定义,在属性—c\c++ —preprocesspr里面)
//dll.cpp
#include "dll.h"
int add(int x,int y){
return x+y;
}
这样在工程的debug目录下就生成了dll和lib文件
2.调用dll文件
新建一个控制台程序calldll
添加c++文件
//calldll.cpp
#include "dll.h"
#include <iostream>
int main(){
int z;
int x=1, y=2;
z=add(x,y);
std::cout<<z<<std::endl;
}
工程属性里设置
1)c\c++ - general - additional include directories里面添加头文件目录
2)linker -additional library directories 里添加lib文件的目录
3)linker -input -additonal dependencies 里添加lib的文件名
 编译通过后用行,会提示丢失dll.dll文件 
解决:将dll.dll放在和exe同一目录下或放在c:\windows\system32目录下(Win64位操作系统且dll.dll不是64位而是32位的话放在c:\windows\syswow64目录下)

再写dll 关于declspec(dllexport)和declspec(dllimport)相关推荐

  1. declspec(dllexport)与_declspec(dllimport) 异同

    declspec(dllexport)与_declspec(dllimport) 异同 2010-11-08 18:51 1 _declspec(dllexport)与_declspec(dllimp ...

  2. 学习编写测试桩之declspec (dllexport)篇

    动态库不能直接运行,也不能接受消息,他提供一些函数供执行他的程序或者动态库调用. windows API中的所有函数都包含在DLL中,其中有几个最为重要:Kernel32.dll,用户管理内存.进程和 ...

  3. FreeBasic写DLL给VB6调用(直接用API创建和修改VB字符串方法)

    写DLL给VB用,不是什么难题,但我们要做到字符变量,从FreeBasic到VB6,从VB6到FreeBasic,在VB6端无痛使用,那就要费点功夫了. VB6代码:直接写 String Privat ...

  4. 求求你别再写上千行的类了,试试这些牛逼的重构技巧吧

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/6844904038383747086 答应我,别再写上千行的类了好吗 最近在对已有项目进行扩展 ...

  5. 科技部通知:先看病,再写论文!!!

    来源:科技部 编辑:学妹 科技部通知 先看病,再写论文!!! 想查看更多学术文章 硕博教师生活.论文写作指导 请扫码关注 视学算法 ☟ 点亮"在看"????

  6. java date 格式化_3种 Springboot 全局时间格式化方式,别再写重复代码了

    原文:3种 Springboot 全局时间格式化方式,别再写重复代码了 掘金 作者: 程序员内点事 时间格式化在项目中使用频率是非常高的,当我们的API接口返回结果,需要对其中某一个date字段属性进 ...

  7. 答应我!别再写上千行的类了,好吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://juejin.im/post/ ...

  8. flask + react_再写一本 Flask 书

    2020/4/1 更新:Flask 新书完成时间推迟 把自己的目标公之于众,有可能会因为受到监督而更容易完成目标,也有可能会让你潜意识里感觉自己好像已经完成了目标,从而让计划更难执行.我更相信前一种理 ...

  9. 再写循环队列----c++实现

    再写循环队列 class MyCircularQueue {public:/** Initialize your data structure here. Set the size of the qu ...

最新文章

  1. 给初恋女孩的信....
  2. 12c PDB自启动
  3. 利用 FastCoding 将对象进行本地持久化
  4. idea 提示vue插件_Vue + SpringBoot + MyBatis 音乐网站
  5. 坑爹的属性,android:descendantFocusability用法简析
  6. JEECG开源团队招募成员计划
  7. 「WC 2019」数树
  8. android 获得资源图片,快速获取app(ios和安卓)资源图片
  9. 帝国cms网站URL伪静态的设置方法
  10. IM即时通讯源码系统安卓苹果IOS双端源码介绍
  11. 2021国内地址数据库表mysql
  12. 当我们在聊高可用时,我们其实在聊什么?
  13. 咸鱼的 Github 情报 | 一个支持边下边播、无版权限制和自动上传的BT离线下载程序...
  14. 三天打鱼两天晒网问题
  15. Android物理按键功能更改
  16. 机器学习思维导图(更新中)
  17. 粒子滤波实现刀具寿命预测
  18. Java分布式跟踪系统Zipkin(六):Brave源码分析-Brave和SpringBoot整合
  19. OneNote for win10本地存储文件的备份与查看
  20. 计算机中丢失dqdui d,dqd的含义,dqd是什么的缩写,dqd的词语,dqd代表的意思

热门文章

  1. 蚂蚁集团沈凋墨:Kubernetes-微内核的分布式操作系统
  2. Lucy-Richardson加速算法以及PSF计算MATLAB代码
  3. Spring基于IOC容器基本原理
  4. 算法的力量万变不离其宗 -- 李开复
  5. 详谈分布式系统缓存的设计细节
  6. 第一行代码阅读笔记---基本知识
  7. hdu 5691 Sitting in Line
  8. jxl创Excel档java示例代码说明
  9. 修改程序的形而上学思考(随笔)
  10. OJ1114: 逆序(数组)(C语言)