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 ...
随机推荐
- systemctl常规应用
以samba为例——常用项 #systemctl start smb ——在smb服务没有启动的情况下启动这项服务. #systemctl restart smb ——在修该过相应的配 ...
- 微信小程序循环中点击一个元素,其他的元素不发生变化,类似点击一个循环中的语音,其他的不发生点击事件
类似语音,因为都在一个数据内,所以点击第一个,所有的语音都变化,解决方法就是 把整个数据都获取下来,然后更改其中一个需要更改的值,然后再把整个数据都setdata回去,如果需要动画的话,wxml里面放 ...
- Day7 - I - Semi-prime H-numbers POJ - 3292
This problem is based on an exercise of David Hilbert, who pedagogically suggested that one study th ...
- Python 编写代码 检查是否遵循PEP 8标准
实际上并非必须遵守PEP 8,但是它已经成为一个默认的.约定俗成的规则,可以使代码风格更统一,提高可读性. 由于最近一直在学习Ubuntu,因此此处仍然以Ubuntu为例,介绍一下规则检查工具,它能帮 ...
- 每天一点点之python - 基础语法
1.字符串的拼接 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) 输出结果如下: 可以通过和c语言一样,也可以通过format()来实现 2.简单运 ...
- Set Request Header
第1步 webpack package.json 的 scripts 里的 dev 要新增 --host 0.0.0.0 这样在浏览器里用ip地址代替localhost就能运行了 第2步 在pc浏览器 ...
- C++(五)构造函数
//构造函数的作用:就是在函数被创建时使用特定的值构造对象,将对象初始化为一个特定的初始状态//例如在构造一个clock类对象的时候,将初始的时间设定为0:0:0//构造函数的名必须与类名相同,不能定 ...
- mysql基本知识的总结
Mysql基本sql知识 Navicat快捷方式: 选中当前行 在行尾:shift+home 在行首:shift+end 执行当前行:ctrl+shift+R 复制当前行:ctrl+D 显示所有数据库 ...
- Loadrunner11的关联问题 《转载》
Loadrunner11的关联问题 链接:http://www.51testing.com/html/15/523415-821644.html
- Spark 2.x 在作业完成时却花费很长时间结束
使用 Apache Spark 2.x 的时候可能会遇到这种现象:虽然 Spark Jobs 已经全部完成了,但是程序却还在执行.比如我们使用 Spark SQL 去执行一些 SQL,这个 SQL 在 ...