• C++ DLL


    DLL(Dynamic Link Library)
    (1)DLL 的编制与具体的编程语言及编译器无关
    只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。譬如Windows提供的系统 DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。
    (2)动态链接库随处可见
    在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL中。kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。
    (3)VC动态链接库的分类
    Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。
    非MFC动态库:不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;
    MFC规则DLL:包含一个继承自CWinApp的类,但其无消息循环
    MFC扩展DLL:采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。

    /** testdll.h **/
    #pragma once
    
    #ifndef __SERIALPORT_DLL__
    #define __SERIALPORT_DLL__
    
    #ifdef SERIALDLL
    #define SERIALDLL extern "C" __declspec(dllimport)
    #else
    #define SERIALDLL extern "C" __declspec(dllexport)
    #endif
    
    SERIALDLL int add(int x,int y);
    
    #endif //__SERIALPORT_DLL__
    
    /** testdll.cpp **/
    #include "SerialPort.h"
    
    int add(int x,int y)
    {
    	return x + y;
    }
    
    /** testdll.def **/
    LIBRARY	"libserial"
    
    EXPORTS
    add @1

    模块定义 (.def) 文件是包含一个或多个描述 DLL 各种属性的 Module 语句的文本文件。如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。
    .def 文件必须至少包含下列模块定义语句:
    1.文件中的第一个语句必须是 LIBRARY 语句。此语句将 .def 文件标识为属于 DLL。LIBRARY 语句的后面是 DLL 的名称。链接器将此名称放到 DLL 的导入库中。
    2.EXPORTS 语句列出名称,可能的话还会列出 DLL 导出函数的序号值。通过在函数名的后面加上 @ 符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从 1 到 N,其中 N 是 DLL 导出函数的个数。

    提示:如果希望优化 DLL 文件的大小,请对每个导出函数使用 NONAME 属性。使用 NONAME 属性时,序号存储在 DLL 的导出表中而非函数名中。如果导出许多函数,这样做可以节省相当多的空间。
    其实__declspec(dllexport)的作用就是让编译器按照某种预定的方式(前面大致解释了这种方式的规则)来输出导出函数及变量的符号,而def文件则是自己为每一个函数和变量指定导出符号,所以def是一个非自动化,手工很强的方式,不是特殊情况的话,实在没有必要浪费这些时间。参考链接:http://blog.csdn.net/g710710/article/details/7255744

    http://blog.csdn.net/xupan_jsj/article/details/9028759

    代码下载链接:https://git.oschina.net/klcf0220/serialport

    Code

    参考链接:http://blog.csdn.net/g710710/article/details/7255744

    http://blog.csdn.net/xupan_jsj/article/details/9028759

    代码下载链接:https://git.oschina.net/klcf0220/serialport

    参考链接:http://msdn.microsoft.com/zh-cn/library/1ez7dh12.aspx

    http://blog.csdn.net/g710710/article/details/7255744

    http://blog.csdn.net/yysdsyl/article/details/2626033

    http://blog.csdn.net/xupan_jsj/article/details/9028759

    代码下载链接:https://git.oschina.net/klcf0220/serialport

  • 相关阅读:
    VIM快捷键(转)
    VIM中文乱码
    vsftpd.conf 联机手册
    keepalived nginx 主备配置
    Keepalived 主备配置
    Linux centos7 安装 keepalived-2.0.6
    Linux centos开机执行JAR Shell脚本
    Nginx负载均衡案例
    Windows虚拟机安装Linux系统
    Linux centos7 redis安装教程
  • 原文地址:https://www.cnblogs.com/klcf0220/p/4043358.html
Copyright © 2020-2023  润新知