|
Вопрос # 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)^));
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|