|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Динамическая загрузка DLL
Имею следующее. Библиотека, которая должна загружаться автоматически.
Код:
library pcInfo; uses SysUtils, Classes, Windows; function GetSysInfo: PChar; stdcall; var Size : Cardinal; PRes : PChar; ORes : String; begin // Имя компьютера Size := MAX_COMPUTERNAME_LENGTH + 1; PRes := StrAlloc(Size); If GetComputerName(PRes, Size) Then ORes:=StrPas(PRes); Result:= PChar(ORes); end; exports GetSysInfo; begin end Ну и собственно программу, для динамического вызова библиотеки. Код:
type TFunction = function : PChar; DLLFunction: TFunction; implementation {$R *.dfm} Function ExecDLLFunction(DLLName : PChar; FunctionName : PChar) : PChar; var hndDLLHandle: THandle; DLLFunction: TFunction; begin try // загружаем dll динамически hndDLLHandle := loadLibrary ( DLLName ); if hndDLLHandle <> 0 then begin // получаем адрес функции @DLLFunction := getProcAddress ( hndDLLHandle, FunctionName ); // если адрес функции найден if addr ( DLLFunction ) <> nil then begin Result := DLLFunction; end else // DLL не найдена ("handleable") showMessage ( 'Function not exists...' ); end else // DLL не найдена ("handleable") showMessage ( 'DLL not found...' ); finally // liberar freeLibrary ( hndDLLHandle ); end; end; Function ExecDLLFunction1(DLLName : PChar; FunctionName : PChar) : PChar; var hndDLLHandle: THandle; begin @DLLFunction :=nil; hndDLLHandle := loadLibrary ( DLLName ); if hndDLLHandle >= 32 then begin @DLLFunction := getProcAddress(hndDLLHandle, FunctionName); if @DLLFunction <> nil then begin Result := DLLFunction; end; freeLibrary ( hndDLLHandle ); end; end; Memo1.Lines.Add(ExecDLLFunction1('pcinfo.dll','GetSysInfo')); Так вот оба способа загрузки DLL и вызова процедуры выдает ошибку при выходе. В чем причина ??? Есть ли нормальный работающий пример по динамической загрузке библиотек и вызове процедур. |
#2
|
||||
|
||||
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#3
|
||||
|
||||
miae Знач так
1) Код:
type TFunction = function : PChar; stdcall; DLLFunction: TFunction; Не профи, но и не чайник . D6 - лучше не придумали. Пока. |