VC++ 链接库(四)MFC动态链接库
来源:互联网 发布:一级建造师网络培训 编辑:程序博客网 时间:2024/05/21 09:43
前面也介绍了非MFC动态链接库和MFC动态链接库,现在我们再来说明一下:
(一)MFC DLL的三种形式
MFC DLL 有三种形式的MFC DLL(在该DLL中可以使用和继承已有的MFC类)可供 选择,即Regular statically linked to MFC DLL(标准静态链接MFC DLL)和Regular using the shared MFC DLL(标准动态链接MFC DLL)以及Extension MFC DLL(扩展MFC DLL)。
第一种DLL的特点是,在编译时把使用的MFC代码加入到 DLL中,因此,在使用该程序时不需要其他MFC动态链接类库的存在,但占用磁盘空间比较大;
第二种DLL的特点是,在运行时,动态链接到MFC类库,因此减少了 空间的占用,但是在运行时却依赖于MFC动态链接类库;这两种DLL既可以被MFC程 序使用也可以被Win32程序使用;
调用前两种DLL的应用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以
第三种DLL的特点类似于第二种,做为MFC类库的 扩展,只能被MFC程序使用。
(二)创建MFC DLL
1. VC6新建一个工程MFCDLL,类型为MFC AppWizard(dll),具体选项为Regular DLL using shared MFC DLL。我们在DllTest.cpp的末尾添加实现代码如下(文件中其他自动生成的代码先不用管):
// DllTest.cpp文件
// DllTest.cpp文件
int add(int a,int b){ return a+b;}int subtract(int a,int b){ return a-b;}
2. 使用时,动态链接库的函数申明是写在def文件中,编译器根据这个文件的函数申明来生成lib文件和dll文件。我们只需要在DllTest.def文件的末尾添加代码如下:
sum @1;sub @2; //后面表示函数的序号
以上两步完成后,即可编译生成DLL了,总共生成DllTest.dll和DllTest.lib两个文件。DLL本身不能运行,所以还需要一个测试程序。
3. 隐式加载MFC DLL并测试
用VC创建一个win32 consoleapplication工程Test(当然这里也可以创建MFC Application[exe]工程),代码如下:
#include <stdio.h> //#include <windows.h> //#include "..\DllTest\DllTest.h"#pragma comment(lib,"DllTest.lib")int add(int a,int b);int subtract(int a,int b); int main(int argc, char *argv[]) { printf("%d\n",add(5,3)); printf("%d\n",subtract(5,3)); return 0; }
注意:直接build有错,讲生成的DllTest.lib文件拷到Test工程目录下,这时#pragma comment(lib,"DllTest.lib")会其效果,重新build错误消失;然后运行出错,将生成的DllTest.dll拷贝进来就可以了。这里使用的是隐式加载的方式,也可以根据上几节中提到的使用显示加载的方式。
- VC++ 链接库(四)MFC动态链接库
- VC++动态链接库编程(四)之MFC扩展 DLL
- VC++动态链接库(DLL)编程(四)――MFC扩展 DLL
- 【VC++积累】之四、动态链接库
- VC DLL 动态链接库(四)
- VC ++链接库(三)非MFC动态库
- VC++ MFC DLL动态链接库编写详解(转)
- 动态链接库与主程序交互之[MFC] VC++动态链接库资源调用(一)
- VC++动态链接库(DLL)编程(四)
- VC++动态链接库(DLL)编程(四)
- MFC 动态链接库
- mfc动态链接库
- MFC:动态链接库
- MFC动态链接库
- MFC动态链接库
- VC++动态链接库
- VC++ 动态链接库
- VC++动态链接库
- linux-3.4.10 _pci_assign_resource函数bug
- 测试基础----测试用例-等价类划分
- 文件传输协议(FTP)的缺点
- C# tostring 格式化输出
- 《『若水新闻』客户端开发教程》——13.代码编写(5)
- VC++ 链接库(四)MFC动态链接库
- 《『若水新闻』客户端开发教程》——14.代码编写(6)
- 最后陪我走下去的会是什么
- android widget 自动删除
- alloc_skb与dev_alloc_skb异同
- cmd下切换中文输入法
- 温文尔雅的伤感空间日志:你心里的痛,是我永远的殇
- Matlab中利用null函数解齐次线性方程组
- uva_10420List of Conquests