关于DLL的问题,快来抢分
一.如何查看一个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




