WEB开发网
开发学院软件开发C++ 利用VC++6.0的depends工具打开dll动态链接库文件及... 阅读

利用VC++6.0的depends工具打开dll动态链接库文件及函数封装

 2012-11-18 15:21:54 来源:WEB开发网   
核心提示:以上的步骤就是做一个dll库的过程,也就是将我自己编写的函数集成在dll文件里,利用VC++6.0的depends工具打开dll动态链接库文件及函数封装(4),进一步说,就是不想别人看见我编的代码,还会为我们提供头文件,比如说windows.h但我们绝对不会知道LoadLibrary()函数的实现代码,只是以借口的形式
以上的步骤就是做一个dll库的过程,也就是将我自己编写的函数集成在dll文件里,进一步说,就是不想别人看见我编的代码,只是以借口的形式提供。全部重建后可以得到一个dll文件:
用depends工具打开:
可以发现列出的函数列表,就是我们上面的函数,dll文件只是以函数名的形式提供接口函数。也就是说,作为卖家,我可以将自己编写好的程序插件,以dll文件的形式的函数接口卖给买家。而买家完全不知道我的接口函数是怎样实现的。
接下来就是利用提供的接口函数,完成汉若塔程序。
首先我们得新建一个头文件t11.h这里包含一些基本的头文件
代码为:
#include"stdio.h"
#include"string.h"
#include"ctype.h"
#include"malloc.h"
#include"stdlib.h"  //atoi(),exit();
#include"io.h"    //eof()
#include"math.h"
#include"windows.h"

#define  TRUE  1
#define  FALSE  0
#define  OK  1
#define  ERROR 0
typedef int Status;
typedef int Boolean;
int p=1;
 
我们再新建一个资源文件main_hrt.cpp也就是主函数所在文件,这里有个小技巧,就是编写完头文件后,就全部重建,会在对应的文件夹下生成一个Debug文件,然后我们将刚才自己做的dll文件拷贝到Debug文件夹下,将函数的头文件hrt_t.h拷贝到工程文件夹下。这也就是我们发下,微软提供dll文件里面的函数,还会为我们提供头文件。比如说windows.h但我们绝对不会知道LoadLibrary()函数的实现代码。想必大家有点头绪了吧。 
代码为:
#include "windows.h"
#include"t11.h"
#include"hrt_t.h"
extern p;       //  引用全局变量
typedef void(*lpFun)(Sqstack&); //宏定义函数指针类型
typedef void(*lpXy)(int,int);
typedef Status(*lpPush)(Sqstack&L,int,int);
typedef void(*lpHrt)(Sqstack &e,Sqstack &f,Sqstack &g,char (*b)[16],char (*a)[16],int n,char A,char B,char C);
void main()
{
 Sqstack A,B,C;
 int n;
 HINSTANCE hDll = NULL;
 lpFun lp = NULL;
 lpXy lpxy = NULL;
 lpPush lppush = NULL;
 lpHrt lphrt = NULL;
 hDll = LoadLibrary("hrt_HH.dll");  // 默认exe当前文件夹中找
 if (hDll != NULL)
 {
     lp = (lpFun)GetProcAddress(hDll,"initstack");
 lpxy = (lpXy)GetProcAddress(hDll,"gotoxy");
     lppush = (lpPush)GetProcAddress(hDll,"push");
 lphrt = (lpHrt)GetProcAddress(hDll,"hrt");
     if (lp != NULL && lpxy!=NULL && lppush!=NULL &&lphrt!= NULL)
 {
       lp(A);
  lp(B);
  lp(C);
 }
 else
 {
  printf("链接库失败!");
  getchar();
  exit(0);
 }
   char a[][16]={"-","---","-----","-------","---------","-----------","-------------","---------------"};   // 定义盘子
 char b[][16]={" ","  ","   ","    ","     ","      ","       ","        "};   // 定义要覆盖对应的空格
 printf("输入盘子数(<=8):");
 scanf("%d",&n);
 printf("\n\n\n\n\n");
 if(n>8)
 {
 printf("输入不正确!");
      getchar();
  getchar();
 exit(1);
 }
 for(int i=1;i<=8;i++)
   printf("\t\t|\t\t\t|\t\t\t|\n");
   printf("\t\t A\t\t\t B\t\t\t C\n");

上一页  1 2 3 4 5  下一页

Tags:利用 VC depends

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接