编写dll 关于declspec(dllexport)和declspec(dllimport)
使用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目录下)
原文地址:http://blog.sina.com.cn/s/blog_a7e72e940101izkh.html
编写dll 关于declspec(dllexport)和declspec(dllimport)相关推荐
- declspec(dllexport)与_declspec(dllimport) 异同
declspec(dllexport)与_declspec(dllimport) 异同 2010-11-08 18:51 1 _declspec(dllexport)与_declspec(dllimp ...
- 再写dll 关于declspec(dllexport)和declspec(dllimport)
使用api 要先懂得怎么使用dll文件: 1.新建一个常规dll //dll.h #ifndef DLL_H #define DLL_H #ifdef DLL_EXPORTS #define DLLE ...
- 使用vs2019编写dll
本文通过一个demo演示dll的编写和调用. 一.编写dll 首先编写一个dll,它提供一个加法函数. 使用visual studio新建项目,我把项目命名为AddDll,选择模板windows桌面向 ...
- BCB 编写 DLL 终极手册
BCB 编写 DLL 终极手册 一. 编写 DLL File/New/Dll 生成 Dll 的向导,然后可以添加导出函数和导出类 导出函数:extern "C" __declspe ...
- 编写DLL所学所思(1)——导出函数
烛秋 http://www.cnblogs.com/cswuyg/archive/2011/09/30/dll.html 动态链接库的使用有两种方式,一种是显式调用.一种是隐式调用. (1) ...
- windows下编写dll
dll的优点 简单的说,dll有以下几个优点: 1) 节省内存.同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中.如果 ...
- c/c++编写dll供其他语言调用
范例 就以md5为例吧,首先去github搜索md5,选一个用c或者c++写的md5. 比如:https://github.com/chinaran/Compute-file-or-string-md ...
- qt编译c语言dll,QT编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了不少人家的SDK,绝大部分用VC编写,并且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0运行库,因 ...
- 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
这段时间要把tinyxml从静态库弄成动态库,要用到__declspec(dllexport)和__declspec(dllimport)来导出dll和lib文件.终于弄明白了export和impor ...
- .net core 调用c dll_Qt编写DLL给外部程序调用,提供VC/C#/C调用示例(含事件)
一.前言 最近这阵子,接了个私活,封装一个开发包俗称的SDK给客户调用,查阅了很多人家的SDK,绝大部分用VC编写,而且VC6.0居多,估计也是为了兼容大量的XP用户及IE浏览器,XP自带了VC6.0 ...
最新文章
- 内科学与计算机专业的相关性,急性心肌梗死患者QT间期变异性及心率变异性与室性心律失常的相关性分析-内科学专业论文.docx...
- .bat文件(%~dp0)和call、echo批处理环境变量
- ios开发学习笔记--Core Motion
- CAS 4.0.0RC 配置MD5验证功能
- cordova常用命令
- lex编译dos命令_微软新的命令行工具:Windows Terminal
- G少爷上证技术分析 8月31日
- 【多线程高并发】深入浅出可见性
- 【Python】程序的分支结构之异常处理
- abb智能控制系统_ABB助力国网冀北电力打造虚拟电厂
- Python面试常用二十题总结
- leetcode-sort-colors
- 【今日CV 计算机视觉论文速览 第110期】Thu, 2 May 2019
- Python:身份运算符is和==的区别
- JavaScript实现map
- [内附完整源码和文档] 基于JSP实现的网上商城系统
- html中的reset(重置)按钮
- sqlmap的简单使用(sql注入)
- 移动花卡服务器系统异常,开通了抖音移动花卡免流服务,为什么使用抖音不显示免流呢?...
- 赛博念经!自带RGB的电子木鱼,能敲出《般若心经》,网友:想买
热门文章
- matlab拉普拉斯算子边缘提取_【图像处理】OpenCV系列十 --- 边缘检测之Laplacian算子...
- php 5的手册,本手册中所涉及的 PHP 版本 - PHP 5 中文文档
- roads 用户体验标准_手持海外通行证,海信激光电视征服全球用户!
- 删改数据如何避免锁表?等等,啥是锁呀
- prometheus监控mysql指标_使用Prometheus监控MySQL状态
- 05-1_部署 master 节点
- farm ugly chicken kick(fuck)这个计算机词汇的由来
- mongodb索引 多健索引
- Spring框架——day04参数校验和文件上传
- [LeetCode]319. Bulb Switcher灯泡开关