__declspec(dllexport)的使用
1. 用法
在 VS 的“预编译”选项里定义_EXPORTING宏
#ifdef _EXPORTING
#define API_DECLSPEC __declspec(dllexport)
#else
#define API_DECLSPEC __declspec(dllimport)
#endif
API_DECLSPEC void HelloWorld();</pre>
2. 作用
2.1.
__declspec(dllexport)用于导出符号,也就是定义该函数的dll;__declspec(dllimport)用于导入,也就是使用该函数。
因为这个头文件既要被定义该函数的dll包含,也要被使用该函数的程序包含,当被前者包含时我们希望使用 __declspec(dllexport) 定义函数,当被后者包含时我们希望使用 dllimport。
2.2.
假设你的A(EXE或DLL)需要调用B(DLL)中的某个导出函数:__declspec(dllexport) void HelloWorld();
不用宏,在项目A中直接包含这个头文件,编译、运行……OK。
打开Dependency Walker(其它合适的工具也可以),打开A(.EXE或.DLL)文件,在左边树中选择根节点,A文件也有导出符号"HelloWorld"
2.3.
不使用 declspec(dllimport) 也能正确编译代码,但使用 declspec(dllimport) 使编译器可以生成更好的代码。编译器之所以能够生成更好的代码,是因为它可以确定函数是否存在于 DLL 中,这使得编译器可以生成跳过间接寻址级别的代码,而这些代码通常会出现在跨 DLL 边界的函数调用中。但是,必须使用 __declspec(dllimport) 才能导入 DLL 中使用的变量。
2.4.
导入全局、静态或者类成员变量需要__declspec(dllimport)。
#define DllImport __declspec(dllimport)
DllImport int j;
__declspec(dllexport)的使用的更多相关文章
- DLL导出函数和类的定义区别 __declspec(dllexport)
		
DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...
 - extern "C" __declspec(dllexport) __declspec(dllimport) 和 def
		
原文:extern "C" __declspec(dllexport) __declspec(dllimport) 和 def 前面的extern "C" _ ...
 - __declspec(dllexport) & __declspec(dllimport)
		
__declspec(dllexport) 声明一个导出函数,是说这个函数要从本DLL导出.我要给别人用.一般用于dll中 省掉在DEF文件中手工定义导出哪些函数的一个方法.当然,如果你的DLL里全是 ...
 - 浅谈__declspec(dllexport)和__declspec(dllimport)
		
__declspec(dllimport)和__declspec(dllexport)经常是成对的,在动态链接库中__declspec(dllexport)导出dll中的成员,__declspec(d ...
 - 动态链接库(dll)   __declspec(dllimport)   __declspec(dllexport)
		
一. __declspec(dllexport) Microsoft 在 Visual C++ 的 16 位编译器版本中引入了 __export,使编译器得以自动生成导出名并将它们放到一个 .lib ...
 - 理解 __declspec(dllexport)和__declspec(dllimport)
		
1.解决的问题: 考虑下面的需求,使用一个方法,一个是提供者,一个是使用者,二者之间的接口是头文件.头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者 ...
 - DLL模块例2:使用__declspec(dllexport)导出函数,extern "C"规范修饰名称,隐式连接调用dll中函数
		
以下内容,我看了多篇文章,整合在一起,写的一个例子,关于dll工程的创建,请参考博客里另一篇文章:http://www.cnblogs.com/pingge/articles/3153571.html ...
 - DLL导出函数和类 之 __declspec(dllexport)
		
可利用__declspec(dllexport)导出函数或类. 若要指定C类型约定导出,则需在前面加extern “C”. 若要导出函数,__declspec(dllexport) 关键字必须出现在调 ...
 - __declspec(dllexport) 和 __declspec(dllimport)的作用
		
operatordll.h #include <iostream> #ifndef _WIN32 #define DLL_EXPORT#else #ifdef OPERATORDLL_EX ...
 - 导出函数__declspec(dllexport)
		
一般而言,动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function). 导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用. ...
 
随机推荐
- 第五篇.python进阶
			
目录 第五篇.python进阶 1. 异常处理 2. 数字类型内置方法 2.定义: 3.常用操作+内置方法: 4.存一个值or多个值: 5.有序or无序: 6.可变和不可变 1.用途: 2.定义: 3 ...
 - pipenv虚拟环境使用方法
			
1.打开cmd安装pipenv, pip install pipenv 2.新建工程目录,项目目录,然后cmd进入工程目录 基本命令: pipenv install ...
 - Delphi WriteFile函数
 - selenium:能够模拟人类打开浏览器的爬虫利器
			
介绍 selenium相当于是一个机器人,可以模拟人类登陆浏览器的行为,比如点击.填充数据.删除cookie等等.Chromedriver是一个驱动Chrome的程序,使用它才可以驱动浏览器,其实Ch ...
 - BLE 5协议栈-通用访问规范层(GAP)
			
文章转载自:http://www.sunyouqun.com/2017/04/ 通用访问规范GAP(Generic Access Profile)是BLE设备内部功能对外的接口层,它规定了三个方面:G ...
 - 安装WIN10+Ubuntu18.04安装教程(实测有效)
			
转载原文链接:https://www.cnblogs.com/masbay/articles/10745170.html 安装过程中尤其注意分区时候的挂载点一定要选对!!!选择Ubuntu的EFI所在 ...
 - dyld: Symbol not found: _OBJC_CLASS_$_xxxx 错误闪退
			
dyld: Symbol not found: _OBJC_CLASS_$_xxx 引起的APP闪退可以先查看xxx所属的库,然后将其设为optional 例如dyld: Symbol not fou ...
 - 使用pycharm,配置环境
			
如果是使用virtualenv,请确保已激活运行环境 不知道怎么激活的,请按以下步骤来: 尝试使用终端通过更改目录(cd)命令导航到包含虚拟环境的文件夹.到达后,尝试输入: source ./venv ...
 - mysqltuner对数据库的优化
			
主要用于对mysql配置及my.cnf配置检查,提供详细信息,为进一步优化mysql做参考. 下载地址: (1)http://mysqltuner.com/ (2)脚本获取# wget -c http ...
 - 【JS】类型检测
			
本文首发于我的个人博客 : http://cherryblog.site/ 前言 js 中的类型检测也是很重要的一部分,所以说这篇文章我们就来讲一下怎么对 JavaScript 中的基本数据类型进行检 ...