zoukankan      html  css  js  c++  java
  • VC++ DLL 1 一点概念

    1、在写代码的时候,我们可能会经常要用到一些封装好的函数或者类,这些可能是C/C++的标准库提供的,也可能是由别人开发的非标准库,这个时候就会涉及到动态链接库或者静态链接库的使用了。

    举个例子,做图像处理的时候会用到OpenCV,那么很显然,OpenCV不是C/C++的标准库,是英特尔公司开发的一套免费的图像处理工具,或者叫图像处理库,我们在使用它的时候就需要在工程中载入头文件、lib文件等,但是有这些东西是仅仅可以编译程序,但是如果我们在文件夹中双击生成的exe文件的时候就会发现,可能会提示找不到xxx.dll之类的信息。上述过程我们用到的头文件。

    dll全称是动态链接库(Dynamic Linkable Library),与之区别的有静态链接库(static Linkable Library)。

    2、静态链接库和动态链接库都是共享代码的方式,两者的区别如下:

    (1)、静态链接库(lib)中的所有指令都会被添加到exe文件中;dll是与exe文件独立的,仅在exe文件执行的时候进行加载或者卸载dll文件;

    (2)、静态链接库不能包含其他静态链接库或者动态链接库;动态链接库可以包含其他动态链接库或者静态链接库;

    3、dll的编制和具体的语言是无关的,也就是说我用C++写的dll是可以被其他语言调用的,其他语言同理;但是要遵循约定的dll的接口规范和调用方式,之前在一家公司实习的时候就遇到过这种情况,我们算法组使用C/C++来写程序的,但是软件组的软件是用C#来写的,当时,我就是用dll的方式提供给对方调用的,当然,还涉及到C#写的exe与c++写的exe之间的其他通信方式。

    4、在windows系统上,dll的使用算是随处可见的,最直接的例子就是在C盘的windows/systems32文件夹中就有很多跟系统和软件运行相关的dll文件:

        kernel32.dll中的函数主要处理内存管理和进程调度;

        user32.dll中的函数主要控制用户界面;

        gdi32.dll中的函数则负责图形方面的操作;

    5、VC 动态链接库的分类:

        (1)、Non-MFC DLL(非MFC动态库):不采用MFC 类库结构,其导出函数为标准的C接口,能被MFC或者非MFC的程序调用;

        (2)、MFC Regular DLL(MFC 规则DLL):包含一个继承自CWinApp的类,但是没有消息循环;

        (3)、MFC Extension DLL(MFC 扩展DLL):只能被MFC类库所编写的程序调用;

    兰陵美酒郁金香,玉碗盛来琥珀光。

    但使主人能醉客,不知何处是他乡。

      --李白 《客中行 / 客中作》

    上善若水,为而不争。
  • 相关阅读:
    perl 升级到5.20版本
    perl 升级到5.20版本
    Group Commit of Binary Log
    Group Commit of Binary Log
    docker exec 运行命令
    docker exec 运行命令
    mysql timestamp 值不合法问题
    mysql timestamp 值不合法问题
    ulimit 说明
    /etc/security/limits.conf 配置
  • 原文地址:https://www.cnblogs.com/Bearoom/p/11721795.html
Copyright © 2011-2022 走看看