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类库所编写的程序调用;
兰陵美酒郁金香,玉碗盛来琥珀光。
但使主人能醉客,不知何处是他乡。
--李白 《客中行 / 客中作》
VC++ DLL 1 一点概念的更多相关文章
- VC++ DLL 发布到生产环境过程
最近项目中用到了VC++ DLL,在本机调试时无任何问题,但是发布出来后,COPY到另外的机器就报错,说找不到DLL,由于自身工作接触这方面比较少,经过一番折腾后,终于解决,以下为解决步骤 一,平台工 ...
- C# 与 VC Dll 传输信息
考虑: 使用string类型传送: 在VC Dll中解析字符: 使用 string 类型将解析的类型传送到C#程序中: 建立VC解析的函数,提高代码可重用性
- C#调用VC dll输出参数
最近做项目需要把以前Vc写的程序整合到VS2005来,用c#写的,以前VC的动态连接库写好了,重写比较麻烦,让C#调用VC dll就好了.但碰到了一个问题:VC中作为输出参数的char*类型的变量应该 ...
- 重要:VC DLL编程
VC DLL编程 静态链接:每个应用程序使用函数库,必须拥有一份库的备份.多个应用程序运行时,内存中就有多份函数库代码的备份. 动态连接库:多个应用程序可以共享一份函数库的备份. DLL的调用方式:即 ...
- VC++DLL动态链接库程序
VC++DLL动态链接库程序 VC++DLL动态链接库程序 C++ DLL 导出函数 使用VS2017等IDE生成dll程序,示例如下: C++ DLL 导出类 1.导出类中第一种方法:简单导出类(不 ...
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...
- C#调用VC DLL堆栈不对称
今天在调程序时,C#调用VC 编译的dll出现堆栈不对称,查了一下资料,转载在这里供大家参考. 问题描述:对 PInvoke 函数“xxFunction()”的调用导致堆栈不对称.原因可能是托管的 P ...
- 对C#调用C++的dll的一点思考
最近在对接C++程序的时候碰到了一些问题,然后花了一段时间才解决,今天就这些小问题来做一个总结,很多时候由于对另外一种开发语言的不熟悉,会在使用的过程中遇到很多的问题,这些问题看似简单但是背后却有很多 ...
- VB调用VC dll的返回方式
第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: e ...
随机推荐
- vue+element 递归上传图片
直接上代码. <template> <div> <el-upload action="http://localhost:3000/pic ...
- jq插件和jq
封装一个jq (function(win) { var jQuery = function(selecter) { this.version = '1.0.1'; //版本号 this.selecte ...
- 原生JS 实现 dom ready
记录一下项目技术问题: 记得:放在head标签内的脚本,第一时间执行 var baseTools = { // dom ready ready: function( f ){ var ie = !!( ...
- Win 10 开启FTP与配置
转载:https://blog.csdn.net/qq_34610293/article/details/79210539 可能出现的问题是:设置共享文件,无法被共享.极大的可能原因是电脑防火墙的问题 ...
- 通过fiddler修改通讯返回值
1 在fiddler里选中url,右键unlock for editing 2 在fiddler里点击url, 在右面的返回值的 TextView 项里修改数据 3 取消 unlock for e ...
- jquery隐藏表格的某列
$('#tableId tr').find('th:eq(3)').hide(); ---------------------------------------------------------- ...
- Emacs服务器模式以及emacsclient配置
Emacs有很多强大的插件,但是插件安装多了会导致启动速度很慢.为了解决这个问题,一个方法是使用emacs提供的server模式. 基本用法[1] 启动emacs server: $ emacs -- ...
- 045-利用反射机制,简单的实现PHP插件模式
<?php //利用反射机制,简单的实现PHP插件模式 # 假设,我们有一款开源产品,所有开发者都必须在我定制的需求之上,进行二次开发, # 而开发完成后的新模块,就是一个不一样的新插件,可以放 ...
- 《thinkphp》二、创建实例
1.目录结构 project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更改) │ ├─index 模块目录(可更改) │ │ ├─confi ...
- python-arp 被动信息收集
python-arp 被动信息收集 概述 横向移动的时候由于局域网中可能存在未分配的IP,如果请求这些未分配的IP可能导致被发现(旁路检测设备),先可以做一下arp被动信息收集.当然对蜜罐类设备没用. ...