Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.01.2008, 16:24
miae miae вне форума
Прохожий
 
Регистрация: 20.01.2008
Сообщения: 1
Репутация: 10
Вопрос Динамическая загрузка 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 и вызова процедуры выдает ошибку при выходе. В чем причина ???

Есть ли нормальный работающий пример по динамической загрузке библиотек и вызове процедур.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:08.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025