学习DLL
来源:互联网 发布:记录生活的软件 编辑:程序博客网 时间:2024/06/05 20:41
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#ifndef _GAME_TOOLS_H_#define _GAME_TOOLS_H_//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#ifdef _cplusplusextern "C"{#endif ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void WINAPI Game_RandomInit(UINT uSeed);INT WINAPI Game_RandomNumber();///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#ifdef _cplusplus}#endif//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////#endif //_GAME_TOOLS_H_///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GameTools.cpp : Defines the exported functions for the DLL application.//#include "stdafx.h"//---------------------------------------------------------------------------------------------------------void WINAPI Game_RandomInit(UINT uSeed){::srand(uSeed);}INT WINAPI Game_RandomNumber(){return ::rand();}//---------------------------------------------------------------------------------------------------------
LIBRARY "GameTools"EXPORTS;RandomGame_RandomInit @5Game_RandomNumber @6
动态连接库DLL的代码和数据,相同的部分可以在进程间共享。
DLL通过导出函数供其它装配件来使用。
VS中有wizzard可以生成DLL工程,它的输出目标是DLL文件(带.dll后缀名),同时还生成导入库(.lib后缀的文件)。导入库包含该DLL的导出函数的列表,不含真实的代码。
exe文件记录它需要使用的DLL文件名及DLL中的函数名。此时exe文件在生成时需要和DLL配套的导入库链接(隐式链接)。
exe程序中也有可以由代码(API函数调用)动态加载DLL,并取得它导出的函数地址,再调用(显式链接)。
一个DLL可以被多个exe使用,从而整体上节约了内存页的使用。
如果该DLL在其它进程中已经被加载,那么操作系统不会重复加载,直接把相同的代码和数据页面映射到本进程,只为不同的部分分配本进程使用的新的内存页面。动态加载DLL与此类似。所以把可能被多个exe使用的公共函数放到DLL中能加快运行速度,节约内存的使用。
在进程装配时,如果该DLL装配件依赖其它DLL装配件,则操作系统会递归地依次装入它们。
一个进程由一个可执行装配件exe(含主入口程序)、一个或多个DLL装配件(某些exe装配件被动态装载时,算作动态装配件)、驱动程序装配件组成。
动态链接库是一种二进制级别的代码复用方法。
C++程序(类、函数等)则是源代码级别的代码复用方法。因为源代码若修改了整个软件都要重新编译。
编写大型工程/算法软件时一般都需要进行装配件模块的分划和设计。
DLL=.h+(.cpp+.def)
调用
#include "../GameTools/GameTools.h"
#pragma comment(lib, "../Debug/GameTools.lib")
- dll学习
- dll学习
- DLL学习
- 学习DLL
- dll学习
- DLL学习
- DLL学习---转载
- 学习开发DLL笔记
- DLL学习(资料收集)
- win32 dll学习笔记
- DLL学习开发笔记
- DLL学习---转载
- DLL学习小结
- vc DLL学习
- 调用dll学习中
- VC DLL学习
- 学习:DLL远程注入
- dll编程学习日志
- multipart/form-data表单提交后,使用request.getParameter来获得text的参数值
- 【算法导论】c++实现计数排序
- 什么是RF(Radio frequency)
- Access denied for user ''@'localhost' to database 'mysql'
- Mina ....包装NIO
- 学习DLL
- Linux终端退出程序不退出解决方案(nohup/screen)
- AIX中支持的VG类型
- 为什么有的XP不能把U盘格式化为exfat模式
- Twitter或将推出自己的社交化搜索
- SDRAM中数据掩码DQM的作用
- js判断整数
- DOM 访问节点
- PBX电话交换机