Fórum Problemas com string... #262776
20/12/2004
0
procedure ListDLLExports(const FileName: string; List: TStrings);
type
TDWordArray = array [0..$FFFFF] of DWORD;
var
imageinfo: LoadedImage;
pExportDirectory: PImageExportDirectory;
dirsize: Cardinal;
pDummy: PImageSectionHeader;
i: Cardinal;
pNameRVAs: ^TDWordArray;
Name: string;
begin
List.Clear;
if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then
begin
try
pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
if (pExportDirectory <> nil) then
begin
pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
DWORD(pExportDirectory^.AddressOfNames), pDummy);
for i := 0 to pExportDirectory^.NumberOfNames - 1 do
begin
Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
pNameRVAs^[i], pDummy));
List.Add(Name);
end;
end;
finally
UnMapAndLoad(@imageinfo);
end;
end;
end;
Quando chamo ela assim ela funciona e lista as rotinas:
s:= ´C:\WINDOWS\SYSTEM32\browseui.dll´;
ListDLLExports(s, List);
s1:=´´;
for i:=0 to list.count-1 do
s1:= s1 + list[i] + #1013;
mas se seleciono o arquivo com um Dialog, não funciona:
s:= Opendialog1.filename;
ListDLLExports(s, List);
s1:=´´;
for i:=0 to list.count-1 do
s1:= s1 + list[i] + 1013;
Alguém sabe o porque disso???
Ertai
Curtir tópico
+ 0Posts
20/12/2004
Marcelo Saviski
s1:=´´; for i:=0 to list.count-1 do s1:= s1 + list[i] + 1013;
por
s1 := list.Text;
esperimente ver o que esta vindo de resultado do OpenDialog, depois do
s:= Opendialog1.filename;
experimente dar um
ShowMessage(s);
para verificar se o nome do arquivo está certo
Gostei + 0
20/12/2004
Dopi
if OpenDialog1.Execute then begin s := OpenDialo1.Filename ; ... ... end ;
Gostei + 0
20/12/2004
Ertai
É claro que eu estou usando o execute, e o valor do filename está correto.
O problema é que dependendo de como a variavel s foi preenchida, o resultado da variavel list da errado.
Gostei + 0
20/12/2004
Massuda
procedure ListDLLExports(const FileName: string; List: TStrings); type TDWordArray = array[0..$FFFFF] of DWord; var imageinfo: LoadedImage; pExportDirectory: PImageExportDirectory; dirsize: Cardinal; pDummy: PImageSectionHeader; I: Cardinal; pNameRVAs: ^TDWordArray; Name: string; pName: PChar; // <-- NOVO begin List.Clear; if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then begin try pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress, False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize); if (pExportDirectory <> nil) then begin pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, DWord(pExportDirectory^.AddressOfNames), pDummy); for I := 0 to pExportDirectory^.NumberOfNames - 1 do begin pName := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, pNameRVAs^[I], pDummy)); if Assigned(pName) then begin Name := PChar(pName); List.Add(Name); end; end; end; finally UnMapAndLoad(@imageinfo); end; end; end;
Gostei + 0
21/12/2004
Ertai
Mas com essa sua mudança ai, agora funciona legal.
Valeu cara...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)