| 
| 
 | Вопрос # 4 607/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!Прочитал статью на http://sources.ru/magazine/0804/delphidll.html - заинтересовало.Это код программы для просмотра функций DLL. Создал свое приложение-попробовал -код работает,но только в 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.
|  |   Вопрос задал: igoriy (статус: Посетитель)Вопрос отправлен: 25 сентября 2010, 07:53
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 25 сентября 2010, 16:28; участников в обсуждении: 1. 25 сентября 2010, 11:38: Вопрос перемещён из тематического раздела Delphi » Взаимодействие с Windows в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. 
|   | igoriy (статус: Посетитель), 25 сентября 2010, 16:28 [#1]:Тема закрывается.Дошло.Так как работаю в 2010 то никак не могу привыкнуть к нововведениям. Нужно делать так  name := PAnsiChar(PDWord(DWord(ImageBase)  + PDword(pname)^));
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |