Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 07:51   #1
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
По умолчанию Получение данных из сторонней dll

как сделать так чтобы в memo например,можно было загрузить все имена процедур и функций ,которые есть в dll?То есть вот как всё должно быть...
на форме есть компонент опендиалог,кнопка и мемо,когда жмёте на кнопку вылетает окошко опендиалога ,там выбираешь dll файл и всё вышеописанное переходит в мемо!Такое можно сделать на дельфи?Заранее спасибо..просто очень интересно
Memfis1992 вне форума Ответить с цитированием
Старый 21.10.2010, 08:55   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Сделать можно. Как? Начните с изучения форматов длл и типов функций в ней.
p51x вне форума Ответить с цитированием
Старый 21.10.2010, 09:10   #3
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
Радость

Цитата:
Сообщение от p51x Посмотреть сообщение
Сделать можно. Как? Начните с изучения форматов длл и типов функций в ней.
спасибо.за совет..теперь буду знать куда копать хоть=ъ
Memfis1992 вне форума Ответить с цитированием
Старый 21.10.2010, 09:17   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от Memfis1992 Посмотреть сообщение
как сделать так чтобы в memo например,можно было загрузить все имена процедур и функций ,которые есть в dll?То есть вот как всё должно быть...
на форме есть компонент опендиалог,кнопка и мемо,когда жмёте на кнопку вылетает окошко опендиалога ,там выбираешь dll файл и всё вышеописанное переходит в мемо!Такое можно сделать на дельфи?Заранее спасибо..просто очень интересно
Автор этой статьи все что вам нужно подробно описал

Копипастю нужный вам кусочек
Цитата:
Просмотр функций определенной DLL

Теперь посмотрим, как можно извлечь все имена функций из файлов PE формата, к которым и относится DLL. Структуру PE формата мы тут рассматривать не будем, следовательно, и исходник будет без пояснений.

Итак, создайте новый проект, бросьте на форму ListBox, в нём мы будем показывать имена функций.

Вот весь проект:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, 
Controls,
Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    lb: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    cmdline   : String;
    ImageBase : DWord;
    DosHeader : PImageDosHeader;
    PeHeader  : PImageNtHeaders;
    PExport   : PImageExportDirectory;
    pname     : PDWord;
    name      : PChar;
  public
    { Public declarations }

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

  procedure FatalOsError;
  begin
    ShowMessage(SysErrorMessage(GetLastError( )));
    Abort;
  end;

Var i: Integer;
begin
  try
    if (ParamCount( ) < 1) then
      Abort
    else
      cmdline := ParamStr(1);

    ImageBase := LoadLibrary(PChar(cmdline));
    if (ImageBase = 0) then  FatalOsError;

    try
      DosHeader := PImageDosHeader(ImageBase);
      if (DosHeader^.e_magic <> IMAGE_DOS_SIGNATURE) then  
FatalOsError;

      PEHeader := PImageNtHeaders(DWord(ImageBase) +
DWord(DosHeader^._lfanew));
      if (PEHeader^.Signature <> IMAGE_NT_SIGNATURE) then  
FatalOsError;

      PExport := PImageExportDirectory(ImageBase +
DWord(PEHeader^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY
_EXPORT].VirtualAddress));
      pname   := PDWord(ImageBase + 
DWord(PExport^.AddressOfNames));

      For i := 0 to PExport^.NumberOfNames - 1 do begin
        name := PChar(PDWord(DWord(ImageBase)  + PDword(pname)^));
        lb.Items.Add(name);
        inc(pname);
      end;
    finally
      FreeLibrary(ImageBase);
    end;

  except
    Application.ShowMainForm := False;
    Application.Terminate;
  end;
end;

end.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 21.10.2010, 09:19   #5
Memfis1992
Пользователь
 
Аватар для Memfis1992
 
Регистрация: 13.06.2010
Сообщений: 38
По умолчанию

наконец -то отличный ответ..лучше и быть не может!!Большое спасибо Sparkman!!!!
Memfis1992 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение списка экспортируемых из dll wmzvov Помощь студентам 3 24.09.2010 19:28
Получение данных mish@ Работа с сетью в Delphi 0 28.04.2010 15:08
dll-Хуки и получение результата в exe Izhic Win Api 2 15.10.2009 18:39
Получение данных с БД. urgu_st SQL, базы данных 5 13.01.2009 15:11
Получение функций из DLL NITRON Общие вопросы Delphi 8 12.09.2007 17:32