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类库所编写的程序调用;

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

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

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

VC++ DLL 1 一点概念的更多相关文章

  1. VC++ DLL 发布到生产环境过程

    最近项目中用到了VC++ DLL,在本机调试时无任何问题,但是发布出来后,COPY到另外的机器就报错,说找不到DLL,由于自身工作接触这方面比较少,经过一番折腾后,终于解决,以下为解决步骤 一,平台工 ...

  2. C# 与 VC Dll 传输信息

    考虑: 使用string类型传送: 在VC Dll中解析字符: 使用 string 类型将解析的类型传送到C#程序中: 建立VC解析的函数,提高代码可重用性

  3. C#调用VC dll输出参数

    最近做项目需要把以前Vc写的程序整合到VS2005来,用c#写的,以前VC的动态连接库写好了,重写比较麻烦,让C#调用VC dll就好了.但碰到了一个问题:VC中作为输出参数的char*类型的变量应该 ...

  4. 重要:VC DLL编程

    VC DLL编程 静态链接:每个应用程序使用函数库,必须拥有一份库的备份.多个应用程序运行时,内存中就有多份函数库代码的备份. 动态连接库:多个应用程序可以共享一份函数库的备份. DLL的调用方式:即 ...

  5. VC++DLL动态链接库程序

    VC++DLL动态链接库程序 VC++DLL动态链接库程序 C++ DLL 导出函数 使用VS2017等IDE生成dll程序,示例如下: C++ DLL 导出类 1.导出类中第一种方法:简单导出类(不 ...

  6. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记

    前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...

  7. C#调用VC DLL堆栈不对称

    今天在调程序时,C#调用VC 编译的dll出现堆栈不对称,查了一下资料,转载在这里供大家参考. 问题描述:对 PInvoke 函数“xxFunction()”的调用导致堆栈不对称.原因可能是托管的 P ...

  8. 对C#调用C++的dll的一点思考

    最近在对接C++程序的时候碰到了一些问题,然后花了一段时间才解决,今天就这些小问题来做一个总结,很多时候由于对另外一种开发语言的不熟悉,会在使用的过程中遇到很多的问题,这些问题看似简单但是背后却有很多 ...

  9. VB调用VC dll的返回方式

    第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: e ...

随机推荐

  1. Java笔记--反射机制

    1.Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法. 2.Java反射机制提供 ...

  2. GDOI#345. 送礼物「JSOI 2015」01分数规划+RMQ

    题目描述 JYY和CX的结婚纪念日即将到来,JYY来到萌萌开的礼品店选购纪念礼物.萌萌的礼品店很神奇,所有出售的礼物都按照特定的顺序都排成一列,而且相邻的礼物之间有一种神秘的美感.于是,JYY决定从中 ...

  3. HihoCoder第九周 状态压缩 二 与POJ2411总结

    在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了Hiho ...

  4. Docker安装,基本概念,执行流程,生命周期简介

    Docker基本概念 在使用Docker前,首先要先知道Docker中这几个常用的概念: 镜像:镜像是文件,只读的,提供了运行完整软硬件应用程序的集装箱. 容器:是镜像的实例,由Docker负责创建, ...

  5. Redis 详解 (二) redis的配置文件介绍

    目录 1.开头说明 2.INCLUDES 3.MODULES 4.NETWORK 5.GENERAL 6.SNAPSHOTTING 7.REPLICATION 8.SECURITY 9.CLIENTS ...

  6. Day4-T4

    原题目 Describe:建个图,连通后删边 [ 如果把 !dis[i][j] 全部定义为INF会更好理解 ] .先特判,再贪心求总数 code: #pragma GCC optimize(2) #i ...

  7. python 求两个数的最大公约数

    给定两个整数a,b,求他们的最大公约数 def gcd(a,b): if a<b: a,b=b,a while(a%b != 0): c = a%b a=b b=c return b a,b = ...

  8. 73.Python中ORM聚合函数详解:Count

    Count:用来求某个数据的个数. 在以下所有的示例中所采用的模型为: from django.db import models # 定义作者模型 class Author(models.Model) ...

  9. ZOJ 3795 Grouping 强连通分量-tarjan

    一开始我还天真的一遍DFS求出最长链以为就可以了 不过发现存在有向环,即强连通分量SCC,有向环里的每个点都是可比的,都要分别给个集合才行,最后应该把这些强连通分量缩成一个点,最后保证图里是 有向无环 ...

  10. v2??? 重启失败

    v2??? 重启失败, 提示 Authorization not available. Check if polkit service is running or see debug message ...