CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

关于DLL的问题,快来抢分

楼主tudouwujun(土豆)2003-12-03 10:58:33 在 Delphi / VCL组件开发及应用 提问

一.如何查看一个DLL的导出函数,我们要调用一个DLL时必须知道它的导出函数!  
  二.C++builder中如何生成DLL文件,最好是附上一定的源码!  
  我的要求不是太过分吧?  
  多谢各位了 问题点数:0、回复次数:10Top

1 楼saien(精益求精)回复于 2003-12-03 11:02:39 得分 0

用快速查看Top

2 楼soundbug(兼职乞丐)回复于 2003-12-03 11:55:22 得分 0

别人的帖子,我转载一下  
  标题   取得某一dll所有输出函数名   ypyrock(原作)    
   
  关键字   delphi   dll    
   
   
   
  取得某一dll所有输出函数名  
  在uses里加上ImageHlp  
   
  procedure   ListDLLFunctions(DLLName:   String;   List:   TStrings);  
  type  
  chararr   =   array   [0..$FFFFFF]   of   Char;  
  var  
  H:   THandle;  
  I,  
  fc:   integer;  
  st:   string;  
  arr:   Pointer;  
  ImageDebugInformation:   PImageDebugInformation;  
  begin  
  List.Clear;  
  DLLName   :=   ExpandFileName(DLLName);  
  if   FileExists(DLLName)   then  
  begin  
  H   :=   CreateFile(PChar(DLLName),   GENERIC_READ,   FILE_SHARE_READ   or  
  FILE_SHARE_WRITE,   nil,   OPEN_EXISTING,   FILE_ATTRIBUTE_NORMAL,   0);  
  if   H<>INVALID_HANDLE_VALUE   then  
  try  
  ImageDebugInformation   :=   MapDebugInformation(H,   PChar(DLLName),   nil,   0);  
  if   ImageDebugInformation<>nil   then  
  try  
  arr   :=   ImageDebugInformation^.ExportedNames;  
  fc   :=   0;  
  for   I   :=   0   to   ImageDebugInformation^.ExportedNamesSize   -   1   do  
  if   chararr(arr^)[I]=#0   then  
  begin  
  st   :=   PChar(@chararr(arr^)[fc]);  
  if   Length(st)>0   then  
  List.Add(st);  
  if   (I>0)   and   (chararr(arr^)[I-1]=#0)   then  
  Break;  
  fc   :=   I   +   1  
  end  
  finally  
  UnmapDebugInformation(ImageDebugInformation)  
  end  
  finally  
  CloseHandle(H)  
  end  
  end  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
  List:   TStrings;  
  I:   integer;  
  S:   String;  
   
  begin  
  List   :=   TStringList.Create;  
   
  ListDLLFunctions('c:\windows\system\Abcsda.dll',   List);  
  showmessage(inttostr(list.count));  
  S   :=   'List   of   functions';  
  for   I   :=   0   to   List.Count   -   1   do  
  S   :=   S   +   #13#10   +   List[I];  
  ShowMessage(S);  
   
  List.Free  
  end;  
   
  //rock  
  //转载请保留此信息Top

3 楼tudouwujun(土豆)回复于 2003-12-03 15:15:59 得分 0

楼上的大哥,请问如何用快速查看?  
  是不是还要安装什么特殊的软件?  
  Top

4 楼soundbug(兼职乞丐)回复于 2003-12-03 15:28:09 得分 0

不用安装,你新建一个工程,把上面的代码写到你的工程中,注意ListDLLFunctions('dll路径及名称',   List);编译成EXE文件,以后你就可以用这个EXE文件查看你想要查看的DLL了Top

5 楼tudouwujun(土豆)回复于 2003-12-03 15:45:05 得分 0

我没有实现,真的不知道怎么弄?  
  Top

6 楼tudouwujun(土豆)回复于 2003-12-03 15:47:51 得分 0

还有更简便的方法吗?Top

7 楼flyforlove(吾将远去)回复于 2003-12-03 16:21:57 得分 0

用快速查看,或者vc++工具,dependency   walker.Top

8 楼lxhong1980(娶个善善良良的妻子,养个聪聪明明的孩子)回复于 2003-12-03 16:40:16 得分 0

soundbug(兼职乞丐)   ,你的方法我怎么不可以啊Top

9 楼tudouwujun(土豆)回复于 2003-12-04 15:13:59 得分 0

"快速查看"是如何实现的?  
   
  我看了看资料,是不是要安装什么软件.我用右键单击Dll文件就没有弹出Quick   View的菜单.  
   
  请高手明示!  
   
  我试过了Vc++的工具dependency   walker可以的.  
   
  Top

10 楼tudouwujun(土豆)回复于 2003-12-04 15:35:25 得分 0

有一点,我再说一下.  
   
  用dependency   walker只能看到函数的名称,但是对于具体函数的参数的问题还没有体现出来,  
   
  用的时候还是不知道如何调用DLL的函数.  
   
  有没有好的方法能看到函数的参数.Top

相关问题

  • dll的问题(给分痛快100)
  • DLL分析
  • 快来看呀。DLL!!!!!!
  • 高分求助(DLL)
  • DLL
  • DLL?
  • dll
  • DLL
  • *.dll
  • dll?

关键词

  • vc++
  • 函数
  • dll
  • imagedebuginformation
  • dllname
  • listdllfunctions
  • chararr
  • arr
  • fc
  • pchar

得分解答快速导航

  • 帖主:tudouwujun

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo