如题.不用TRY...EXCEPT..END来获得.
解决方案 »
- String literals may have at most 255 elements
- 如何使dbgrid中的某一行某一列的颜色随着数据库的内容变化
- 请问delphi中是否可以将任意格式的文本文件读入到数据库中?(实现不知道文本文件的具体格式)
- 请问 IDHTTP如何实现多线程访问同一个URL地址??
- 问天下谁是英雄?一个月余未有人解决的问题
- 如何在BCB中使用MFC,以及混用VCL和MFC?请提供相关的详细资料。200分相送!!
- raise exception class EOleExcetion with message "bookmark is invalid"
- 南京的朋友过来聚聚!!
- 动态创建QUICKREP一个小的问题,急急急!!!
- 关于B/S的问题!!!!!!
- 有没有这样的数据关联下拉控件
- 大家帮帮忙,Delphi无法直接运行,程序界面一闪而过,但是编译exe文件成功.
function GetProcList(DllFileName: String): String;
var
DataDirectory: TImageDataDirectory;
P1: ^Cardinal;
Base, NumberOfNames, AddressOfNames, i: Cardinal;
NameList: TStrings;
hModule: Cardinal;
begin
hModule := LoadLibrary(PChar(DllFileName));
NameList := TStringList.Create;
try
DataDirectory :=
PImageNtHeaders(Cardinal(hModule) +
Cardinal(PImageDosHeader(hModule)^._lfanew))^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 16);
Base := P1^; //输出函数的起始序号。一般为1。
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 24);
NumberOfNames := P1^;//输出函数名的指针的数组中的元素个数。
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 32);
AddressOfNames := P1^; //一个RVA,指向输出函数名的指针的数组。
begin
//lpProcName参数指向函数名
for i := Base to NumberOfNames + Base - 1 do
begin
//按顺序在输出函数名中找
P1 := Pointer(hModule + AddressOfNames + (i - 1) * 4);
NameList.Add(PChar(hModule + P1^)); //当前输出函数名
end;
end;
finally
FreeLibrary(hModule);
Result := NameList.DelimitedText;
end;
end;
var
DataDirectory: TImageDataDirectory;
P1: ^Cardinal;
Base, NumberOfNames, AddressOfNames, i: Cardinal;
NameList: TStrings;
hModule: Cardinal;
begin
hModule := LoadLibrary(PChar(DllFileName));
NameList := TStringList.Create;
try
DataDirectory :=
PImageNtHeaders(Cardinal(hModule) +
Cardinal(PImageDosHeader(hModule)^._lfanew))^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 16);
Base := P1^; //输出函数的起始序号。一般为1。
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 24);
NumberOfNames := P1^;//输出函数名的指针的数组中的元素个数。
P1 := Pointer(hModule + DataDirectory.VirtualAddress + 32);
AddressOfNames := P1^; //一个RVA,指向输出函数名的指针的数组。
begin
//lpProcName参数指向函数名
for i := Base to NumberOfNames + Base - 1 do
begin
//按顺序在输出函数名中找
P1 := Pointer(hModule + AddressOfNames + (i - 1) * 4);
NameList.Add(PChar(hModule + P1^)); //当前输出函数名
end;
end;
Result := NameList.DelimitedText;
finally
FreeLibrary(hModule);
NameList.Free;
end;
end;