Bir dll içindeki fonksiyonları öğrenme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Bir dll içindeki fonksiyonları öğrenme

Mesaj gönderen hdayi »

Merhaba,
Arama sonuçlarında bikaç bişey buldum ama, detaylı bir bilgi yoktu.
Var olan bir dll içindeki fonksiyonları nasıl öğrenebilirim?
Teşekkürler.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
elimde win9x sistemlerde sorunsuzca çalışıan bir fonksiyon var WinXP de bir kaç küçük değişiklikle çalışır. Kolay gelsin.

Kod: Tümünü seç

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;
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Kod: Tümünü seç

Uses
  ImageHlp;

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;

Kolay gelsin
Hüseyin BAHADIR
En son hbahadir tarafından 25 Mar 2005 02:40 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
burakb44
Üye
Mesajlar: 131
Kayıt: 11 Mar 2005 03:13

Mesaj gönderen burakb44 »

merhaba hbahadir; gönderdiğiniz kodu çalıştırdığımda access violation..... hatası veriyor sebebi ne olabilir
Cevapla