C++中动态链接库导入和导出的示例分析-创新互联

这篇文章主要为大家展示了“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++ 中动态链接库导入和导出的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联网站建设公司行业资讯频道!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:C++中动态链接库导入和导出的示例分析-创新互联
转载来源:http://azwzsj.com/article/cssdip.html