我是靠谱客的博主 贪玩黑米,最近开发中收集的这篇文章主要介绍c语言自动导包,C++ 中动态链接库--导入和导出的实例详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C++ 中动态链接库--导入和导出的实例详解

__declspec(dllexport)和__declspec(dllimport):

__declspec(dllexport):编译器看到一个变量、函数或者C++类被它修饰,那么它就知道应该在生成的DLL 模块中导出该变量、函数或C++类。

__declspec(dllimport):编译器看到一个变量、函数或者C++类被它修饰,那么它就知道可执行文件或DLL的源文件需要从其它DLL模块中导入一些变量和函数。

DLL的导入段:

构建可执行模块时,可执行模块还可以包含一个导入段,其中列出了所有它需要的DLL模块的名称,对列出的每个DLL,

该段还记录了可执行文件的二进制代码中引用的函数和变量的符号名。DLL中也有同样的导入段,

记录它所需要的模块名称和函数、符号名。

DLL文件导出段:

链接器生成DLL的文件中会嵌入一个导出符号表,这个导出段列出了导出的变量、函数和类的符号名。

extern "C"作用:

extern "C" 用来告诉编译器不要对变量名或函数名进行改编,这样C/C++或任何编程语言编写的可执行模块都可以访问该变量或函数。

创建兼容DLL:

C++支持函数重载,C语言不支持函数重载,C++编译器会对函数名进行修改,而C语言则不会。

为了用Microsoft工具包构建一个能与其它编译器厂商的工具包链接的DLL,必须告诉编译器不要对导出的函数名进行改编。

可通过以下几种方式实现:

1、extern "C" 修饰导出函数、变量和类;

2、为项目创建一个.def文件;

LIBRARY "dll-name.dll"

EXPORTS

func-name @ 1

.def文件的规则为:

1> EXPORTS语句后列出要导出函数的名称,可以在.def文件中的导出函数名后加 @n,表示要导出函数的序号为n;

2> .def文件中的注释由每个注释行开始处的分号指定,且注释不能与语句共享一行;

3、DLL源文件中加入:#pragma comment(linker, "/export:MyFunc=_MyFunc@8")

如有疑问请留言或者到本站社区 交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

最后

以上就是贪玩黑米为你收集整理的c语言自动导包,C++ 中动态链接库--导入和导出的实例详解的全部内容,希望文章能够帮你解决c语言自动导包,C++ 中动态链接库--导入和导出的实例详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部