C19、DLL

Windows三个重要的DLL

n         Kernel32.dll:管理内存、进程、线程

n         User32.dll:执行用户界面(窗口创建和消息传送)

n         GDI32.dll:画图和文本显示。

特殊DLL

n         AdvAPI32.dll:安全、注册表、事件记录

n         ComDlg32.dll:常用对话框

n         ComCtl32.dll:常用窗口控件

DLL的特殊目的:Windows某些特性只能为DLL使用:

n         安装挂钩(SetWindowsHookExSetWinEventHook

n         COM

n         ActiveX

创建DLL模块:

发行DLL(给客户使用其中的函数)时要分发的文件:.h, .lib, .dll

发行EXE模块(给客户运行)时要分发的文件:.dll

一、头文件格式

/*************************************************************************

       Module MyLib.h

// Module Name; Purpose; Date; Edition

*************************************************************************/

#ifdef MYLIBAPI

//  MYLIBAPI 要在可执行文件的头部定义

//  你的函数,变量申明

#else

//  这里是使用DLL模块的模式

#define MYLIBAPI extern “C” __declspec(dllimport)

#endif

//  在这里定义数据结构和符号。

//  定义输出变量(尽量避免输出变量

MYLIBAPI int g_nResult;

//  输出函数的申明

MYLIBAPI int MyFuncint n);

/ end of file ///

二、源文件格式

/*************************************************************************

       Module MyLib.cpp

// Module Name; Purpose; Date; Edition

*************************************************************************/

// 包含你需要的头文件

#include<windows.h>

 

// 定义宏的位置

// 在包含头文件之前,及任何函数、变量定义之前 定义宏

#define MYLIBAPI extern “C” __declspec(dllexport)

// 包含头文件

#include “mylib.h”

// 代码

int g_nResult;

int MyFunc(int n){  return n;           }

/ end of file ///

三、Mircrosoft编译器会修改函数名,如上面的函数的输出节中名字会是:_ MyFunc @4。若要使其它编译器能够使用你的库,有两个方法(建议使用第一种)

a)         为编程项目建立.def文件,加上类似下面的EXPORTS节,就会输出未修改过的函数名:

EXPORTS

       MyFunc

b)        也可以在DLL源代码模块中,添加下面代码:

#pragma comment(linker, “/export:MyFunc=_MyFunc@4”)

四、VCDumpBin.exe(查看MSDN)程序可以查看有哪些节,以及哪些输入、输出节,模块列表,输入符号列表等。(RVA这一列指明在DLL文件映像中的什么位置能够找到输出符合的位移量)

五、加载程序搜索DLL的顺序(下一节将介绍在如何改变搜索顺序)

a)         包含可执行文件的目录

b)        进程的当前目录

c)        Windows系统目录

d)        Windows目录

e)         PATH环境变量中列出的各个目录

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值