学习DLL

///
#ifndef _GAME_TOOLS_H_
#define _GAME_TOOLS_H_
///


///
#ifdef _cplusplus
extern "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
;Random
	Game_RandomInit	  @5
	Game_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")
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值