利用VC++6.0的depends工具打开dll动态链接库文件及函数封装
2012-11-18 15:21:54 来源:WEB开发网核心提示: 如果熟悉windows的用户就会发现windows下有很多dll文件,但很多人不知道这些文件究竟是用来干什么的,利用VC++6.0的depends工具打开dll动态链接库文件及函数封装,为什么要做成dll文件,现在我就windows下的systems文件夹下的user32.dll文件,将我的程序进行封装,只提供相应的
如果熟悉windows的用户就会发现windows下有很多dll文件,但很多人不知道这些文件究竟是用来干什么的,为什么要做成dll文件。现在我就windows下的systems文件夹下的user32.dll文件,利用VC++6.0的depends工具打开,截图为:
我们很容易发现,Function行都是我们开发用的API,也就是说微软通过将他们编写的函数放入一个dll文件中,而函数具体代码,我们是无法找到的,因为这是一个公司的核心竞争力所在,微软也不至于蠢到把windows开发代码给我们吧,那肯定是不现实的。
在这里我并不会对dll做详细的解析,我只想通过我的一个汉若塔程序,将我的程序进行封装,只提供相应的接口。
首先我们打开VC++6.0文件--新建--工程--Win32 Dynamic-Link Library
确定默认一个空的工程。
然后新建一个头文件hrt_t.h
包含代码:
#define INIT_STACK_SIZE 40
#define STACK_ADD 10
typedef struct
{
int xu; // 对应的盘子序数
int zbj; // 对应的纵坐标
}cun;
typedef struct // 把位子放入栈中 线性表操作
{
cun *top;
cun *bottom;
int stacksize;
} Sqstack;
再新建一个头文件hrt.h
#define STACK_ADD 10
typedef struct
{
int xu; // 对应的盘子序数
int zbj; // 对应的纵坐标
}cun;
typedef struct // 把位子放入栈中 线性表操作
{
cun *top;
cun *bottom;
int stacksize;
} Sqstack;
再新建一个头文件hrt.h
代码为:
extern "C" void __declspec(dllexport) initstack(Sqstack &L);
extern "C" Status __declspec(dllexport) push(Sqstack&L,int xu,int zbj);
extern "C" Status __declspec(dllexport) pop(Sqstack&L,int&xu,int&zbj);
extern "C" Status __declspec(dllexport) emptystack(Sqstack L);
extern "C" Status __declspec(dllexport) gettop(Sqstack L,int&xu,int&zbj);
extern "C" void __declspec(dllexport) GotoConsoleXY(HANDLE hConsole,int x,int y);
extern "C" void __declspec(dllexport) gotoxy(int x,int y);
extern "C" void __declspec(dllexport) huatu(Sqstack&A,Sqstack&B,char(*b)[16],char(*a)[16],int e,int zbj,int l,int xu);
extern "C" void __declspec(dllexport) move(Sqstack&A,Sqstack&B,Sqstack&C,char(*b)[16],char(*a)[16],char x,char Y);
extern "C" void __declspec(dllexport) hrt(Sqstack &e,Sqstack &f,Sqstack &g,char (*b)[16],char (*a)[16],int n,char A,char B,char C);
extern "C" Status __declspec(dllexport) push(Sqstack&L,int xu,int zbj);
extern "C" Status __declspec(dllexport) pop(Sqstack&L,int&xu,int&zbj);
extern "C" Status __declspec(dllexport) emptystack(Sqstack L);
extern "C" Status __declspec(dllexport) gettop(Sqstack L,int&xu,int&zbj);
extern "C" void __declspec(dllexport) GotoConsoleXY(HANDLE hConsole,int x,int y);
extern "C" void __declspec(dllexport) gotoxy(int x,int y);
extern "C" void __declspec(dllexport) huatu(Sqstack&A,Sqstack&B,char(*b)[16],char(*a)[16],int e,int zbj,int l,int xu);
extern "C" void __declspec(dllexport) move(Sqstack&A,Sqstack&B,Sqstack&C,char(*b)[16],char(*a)[16],char x,char Y);
extern "C" void __declspec(dllexport) hrt(Sqstack &e,Sqstack &f,Sqstack &g,char (*b)[16],char (*a)[16],int n,char A,char B,char C);
之后新建一个资源文件hrt.cpp
代码为:
#include"t11.h"
#include"hrt_t.h"
#include"hrt.h"
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#include"hrt_t.h"
#include"hrt.h"
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
void initstack(Sqstack &L) // 初始化栈操作
{
L.bottom=(cun*)malloc(INIT_STACK_SIZE*sizeof(cun));
if(!L.bottom)
{
printf("内存分配失败!!");
exit(-1);
}
L.top=L.bottom;
L.stacksize=INIT_STACK_SIZE;
}
{
L.bottom=(cun*)malloc(INIT_STACK_SIZE*sizeof(cun));
if(!L.bottom)
{
printf("内存分配失败!!");
exit(-1);
}
L.top=L.bottom;
L.stacksize=INIT_STACK_SIZE;
}
更多精彩
赞助商链接