Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблемы с Exports функциями из DLL


Автор: ivan219 29.9.2006, 15:49
Unit загрузки и проверки DLL
Код

unit Plugin;
interface
uses Windows, ProFun;

procedure LoadPlugin;
function LoadLib(NameLib:PAnsiChar):Boolean;


implementation
uses UnitCalculator;

procedure LoadPlugin;
var
   Lib:PAnsiChar;
   S:String;
begin
 S:='Test.dll';
 Lib:=PChar(S);
 if LoadLib(Lib) then MessageBox(0,'Запись в фаил','сообщение',MB_OK);
end;

function LoadLib(NameLib:PAnsiChar):Boolean;
var
   LibHandle:THandle;
   LibLoad:Boolean;
begin
 Result:=False;
 LibHandle:=0;
 LibHandle:=LoadLibrary(NameLib);
 try
  if LibHandle=0 then MessageBox(0,'Библиотека не загружена','сообщение',MB_OK)
  else
   begin
    MessageBox(0,'Библиотека загружена','сообщение',MB_OK);
    if LibLoad then
     begin
      MessageBox(0,'Функция найдена','сообщение',MB_OK);
      Result:=True;
     end
    else
     begin
      MessageBox(0,'Функция не найдена','сообщение',MB_OK);
      Result:=False;
     end;
   end;
 finally
  FreeLibrary(LibHandle);
 end;
end;
end.


Тестовая библиотека.
Код

library Test;
uses Windows;
function LibLoad:Boolean;
begin
 LibLoad:=False;
end;
exports LibLoad;
begin
end.


Я загружаю библиотеку протом вызывю её и она должна мне передать False т.е. программа должна мне выдать сообщение что 'Библиотека загружена' и  'Функция не найдена' а он мне пишет что 'Функция найдена' т.е. получается что мая функция
Код

LibLoad

постоянно возвращает True

Также я переименовал функцию
Код

library Test;
uses Windows;
function LibL1oad:Boolean;
begin
 LibL1oad:=False;
end;
exports LibL1oad;
begin
end.


А она всёраано пишет что 'Функция найдена'.

Где уменя ошибка smile и как надо правильно делать smile 

Автор: Snowy 29.9.2006, 16:39
Так ты нигде не импортируешь эту функцию и нигде не используешь.
С чего ей вызываться?

Автор: ivan219 29.9.2006, 17:03
А тогда как её можно динамически импортировать т.е. мне ненадо чтоб она была постоянно загружена smile 

Автор: Демо 29.9.2006, 17:59
Цитата(ivan219 @  29.9.2006,  17:03 Найти цитируемый пост)
А тогда как её можно динамически импортировать т.е. мне ненадо чтоб она была постоянно загружена 


См. GetProcAddress

Автор: Snowy 29.9.2006, 18:02
Код

  ...
   LibLoad: function: Boolean;
  ...
    LibLoad := GetProcAddress(LibHandle, 'LibLoad')
    if Assigned(LibLoad) and LibLoad then
     begin
      MessageBox(0,'Функция найдена','сообщение',MB_OK);
...

Автор: Демо 29.9.2006, 18:02
var
  GetValue:       function(const p: Pointer):Pointer;


...

  @GetValue :=            GetProcAddress(hLib,'GetAddr');

Автор: Snowy 29.9.2006, 18:05
http://vingrad.ru/DELPHI-DELPHI-000152

Автор: ivan219 29.9.2006, 19:46
Snowy, Спасибо по читаю а то я уже запутался smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)