美文网首页
__declspec(dllexport)

__declspec(dllexport)

作者: 朔方烟尘 | 来源:发表于2019-05-14 14:55 被阅读0次

https://bbs.csdn.net/topics/330169671?page=3

https://blog.csdn.net/yang0923bin/article/details/38561831

https://blog.csdn.net/Repeaterbin/article/details/4269666

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;</pre>

__declspec(dllexport)是用于避免需要自己写 DEF 文件的。编译器会为被declspec(dllexport)修饰的函数自动添加一个导出函数入口。如果你在其他模块中包含 declspec(dllexport)的头文件,这些项目的导出表中也会生成一个同名导出函数。

相关文章

  • __declspec(dllexport)

    https://bbs.csdn.net/topics/330169671?page=3 https://blog...

  • DllMain

    使用 __declspec(dllexport) 从 DLL 导出 DllMain AfxInitExtensio...

  • DLL的创建

    如果想导出一个全局函数,就用关键字来声明__declspec(dllexport),如__declspec(dll...

  • C++ dll 的封装

    extern "C" __declspec(dllexport) 接口点设置 #ifdefc_plusplus e...

  • C语言生成动态链接库以及调用方法

    生成方法(代码示例): .C文件: __declspec(dllexport) int mymax(int a,i...

  • 皇宋大观iOS注意事项

    1.编译报错: "unknown type name __declspec" 2._zzStart…,_zzSto...

  • 补丁与插件

    DLL怎么导出函数?1.1 使用关键字_decslpec(dllexport)1.2 使用def文件导出 在函数前...

  • DLL导出函数

    在函数声明前加__declspec(...) -声明时: -调用时:(调用方法可以参照前面的DLL链接) 采用模块...

  • DLL中使用头文件和导出一个类

    在DLL项目中。添加mydll.h/ mydll.cpp 原则,在DLL文件中,将函数声明为 _declspec(...

  • C++导出函数

    前面别忘记extern "C",否则导出的函数名称将会被改编,后面被加上@YAH 如果只试用__declspec(...

网友评论

      本文标题:__declspec(dllexport)

      本文链接:https://www.haomeiwen.com/subject/uwvsaqtx.html