WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院软件开发C++ 利用VC++6.0的depends工具打开dll动态链接库文件及... 阅读

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

 2012-11-18 15:21:54 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄妞ゆ劗鍘ч埥澶娢熼柨瀣偓濠氭⒑瑜版帒浜伴柛鎾寸☉閳绘柨顫濋懜纰樻嫼闂佸憡绋戦オ鏉戔枔閺冣偓缁绘稓浠﹂崒姘瀳闂佸磭绮幑鍥嵁鐎n亖鏀介柟閭﹀墯椤斿倹淇婇悙顏勨偓鏍ь潖婵犳艾鍌ㄧ憸蹇涘箟閹绢喗鏅搁柨鐕傛嫹
核心提示:以上的步骤就是做一个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

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