Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с Exports функциями из DLL, Что-то невыходит. 
V
    Опции темы
ivan219
  Дата 29.9.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



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 

Это сообщение отредактировал(а) ivan219 - 29.9.2006, 15:54
PM MAIL ICQ   Вверх
Snowy
Дата 29.9.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Так ты нигде не импортируешь эту функцию и нигде не используешь.
С чего ей вызываться?
PM MAIL   Вверх
ivan219
Дата 29.9.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



А тогда как её можно динамически импортировать т.е. мне ненадо чтоб она была постоянно загружена smile 
PM MAIL ICQ   Вверх
Демо
Дата 29.9.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



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


См. GetProcAddress


--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 29.9.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

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

PM MAIL   Вверх
Демо
Дата 29.9.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



var
  GetValue:       function(const p: Pointer):Pointer;


...

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



--------------------
    
PM MAIL ICQ Skype   Вверх
Snowy
Дата 29.9.2006, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



PM MAIL   Вверх
ivan219
Дата 29.9.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Snowy, Спасибо по читаю а то я уже запутался smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.