VC++:创建,调用Win32动态链接库
来源:互联网 发布:珠江钢琴天猫淘宝 编辑:程序博客网 时间:2024/05/18 07:23
概述
DLL(Dynamic Linkable Library)动态链接库,Dll可以看作一种仓库,仓库中包含了可以直接使用的变量,函数或类。
仓库的发展史经历了"无库" ---> "静态链接库" ---> "动态链接库"。
静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。
仓库的发展史经历了"无库" ---> "静态链接库" ---> "动态链接库"。
静态链接库与动态链接库都能实现共享代码,如果使用静态链接库,编译后lib中的指令会被包含在生成的EXE文件中,如果使用动态链接库,则不会被包含到EXE文件中,EXE文件执行时动态加载和卸载dll文件。
库的分类
1.Win32库(非MFC)库
Win32库又分为:动态链接库和静态链接库
Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。
Win32库又分为:动态链接库和静态链接库
Win32库不采用MFC类库结构,导出函数为标准的C接口,可以被MFC或非MFC编写的应用程序调用。
2.MFC库
MFC库又分为:MFC规则DLL和MFC扩展DLL
MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。
MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。
MFC库又分为:MFC规则DLL和MFC扩展DLL
MFC规则DLL:包含一个集成自CWinApp的类,但其无消息循环。
MFC扩展DLL:采用MFC的动态链接库创建,它只能被MFC编写的应用程序调用。
创建Win32动态链接库
使用vs2010进行创建
1.“新建项目” 项目名为"wn32dll”--->选择"Win32项目" --->下一步 勾选 "Dll"和"导出符号"如下图:
wn32dll.cpp添加自定义函数:
// wn32dll.cpp : 定义 DLL 应用程序的导出函数。//#include "stdafx.h"#include "wn32dll.h"// 这是导出变量的一个示例WN32DLL_API int nwn32dll=0;// 这是导出函数的一个示例。WN32DLL_API int fnwn32dll(void){return 42;}// 这是已导出类的构造函数。// 有关类定义的信息,请参阅 wn32dll.hCwn32dll::Cwn32dll(){return;}/*************自定义函数******************/WN32DLL_API int WN_Add(int a, int b){return a + b;}wn32dll.h中对声明自定义的函数
// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 WN32DLL_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将// WN32DLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的// 符号视为是被导出的。#ifdef WN32DLL_EXPORTS#define WN32DLL_API __declspec(dllexport)#else#define WN32DLL_API __declspec(dllimport)#endif// 此类是从 wn32dll.dll 导出的class WN32DLL_API Cwn32dll {public:Cwn32dll(void);// TODO: 在此添加您的方法。};extern WN32DLL_API int nwn32dll;WN32DLL_API int fnwn32dll(void);//******************自定义函数**********************/WN32DLL_API int WN_Add(int a, int b);
编译该项目,会在Debug目录中生成wn32dll.dll和wn32dll.lib文件,使用Dependency Walker工具查看是否成功
调用Win32动态链接库
鼠标在解决方案右击 ---> "添加" ---> "新建项目",项目名称为"dllTest",选择win32控制台项目在dllTest.cpp源文件中添加如下代码:
// dllTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "../wn32dll/wn32dll.h"#ifdef _DEBUG#pragma comment(lib, "../Debug/wn32dll.lib")#else#pragma comment(lib, "../Release/wn32dll.lib")#endifint _tmain(int argc, _TCHAR* argv[]){int result = WN_Add(1, 5);printf("result = %d\n", result);getchar();return 0;}
编译连接生成dllTest.exe文件,执行结果如下:
欢迎加群交流:C/C++开发交流
扫码关注公众号"CPP开发之路"
阅读全文
1 0
- VC++:创建,调用Win32动态链接库
- VC++:创建,调用Win32静态链接库
- Delphi中如何调用VC++创建的动态链接库
- Delphi中怎么调用VC++创建的动态链接库
- VC++ 6.0如何创建与调用动态链接库
- VC++ 6.0如何创建与调用动态链接库
- VC++如何创建与调用动态链接库
- VC++ 6.0如何创建与调用动态链接库
- VC++6.0如何创建与调用动态链接库(dll)
- Delphi中怎么调用VC++创建的动态链接库
- Delphi中怎么调用VC++创建的动态链接库
- VC++ 6.0如何创建与调用动态链接库
- VC++6.0如何创建与调用动态链接库(dll)
- VC创建DLL动态链接库及其调用
- VC++:创建,调用MFC动态链接库(扩展DLL)
- vc下制作win32动态链接库
- Net中调用Win32动态链接库
- 采用VS2008创建Win32动态链接库
- poj 1426 Find The Multiple
- 自定义标签,方便你复习
- 场景Scene
- AirBook GTI电脑这么厉害,竟然有数据恢复的功能?
- div下js失效的问题
- VC++:创建,调用Win32动态链接库
- timeline,一个简单精美的自定义时间轴
- 定时器
- 前端基于vue的分页
- Centos 7 右上角面板里没有wired network图标的问题
- linux下的python
- 实现UISearchBar的Placeholder居左显示
- 提高工作效率的几个chrome插件
- React简介