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

Delphi Sources



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

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.07.2008, 01:20
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
Вопрос dll + dll ?

народ. помогите разобраться. любая библиотека работает от приложения типа *.ехе
я знаю что одна библиотека при необходимости может обращаться к другой.
что надо прописать чтобы 1.dll обращался не к *.ехе а к 2.dll ?
расклад такой: приложение при запуске обращается к 1.dll, после чего 1.dll должна обратиться к 2.dll...
  #2  
Старый 28.07.2008, 07:56
k@Z@k k@Z@k вне форума
Новичок
 
Регистрация: 31.07.2007
Сообщения: 55
Репутация: 12
По умолчанию

Используй динамическую загрузку библиотек
  #3  
Старый 28.07.2008, 10:23
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

не понял... какая разница какая загрузка? разница что у статической размер кода меньше, а толку?
суть в том что мне не нужны в приложении if/then/else или там разные кнопки.
кнопка одна и процедура утвердительная, при нажатии на кнопку приложение обращается в одну библиотеку и все. далее эта библиотека уже сама должна обратиться к другим и там уже в зависимости if/then/else ....
я уже пытался в одной библиотеке прописать код вызова в другую также как и в приложении, но понял что это глупо

или это было предложение строить дерево кодов из динамических загрузок?

Последний раз редактировалось drkane, 28.07.2008 в 10:42.
  #4  
Старый 28.07.2008, 12:33
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Всё делается по цепочке:
Project1.exe:
Код:
function Fun1(X1, X2: Integer): Integer; external 'lib1.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption:= IntToStr(Fun1(2, 3));
end;
Lib1.dll:
Код:
function Fun2(Y1: Integer): Integer; external 'lib2.dll';

function Fun1(X1, X2: Integer): Integer;
begin
  Result:= Fun2(X1) + Fun2(X2);
end;
exports Fun1;

begin
end.
Lib2.dll:
Код:
function Fun2(Y1: Integer): Integer;
begin
  Result:= Sqr(Y1);
end;
exports Fun2;

begin
end.
  #5  
Старый 28.07.2008, 13:10
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

помоему я так уже пытался сделать... не помню, но чтото пытался...
это действующая цепочка? вечером попробую
  #6  
Старый 28.07.2008, 18:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По моему, это архитектурная ошибка.
у тебя получается промежуточная длл, которая все-равно ничего не делает.

ИМХО, если я правильно понял задачу, то тут как раз нужна динамическая подгрузка разных длл, экспортирующих одну и ту же функцию (по игнатуре). А какую длл ты грузишь - определяют настройки основной программы.

У меня так на работе сделана шифровка. в зависимости от параметра подгружается одна или другая длл. Обе экспортируют одинаковую функцию. Одна длл ничего не шифрует, просто перекладывает данные. А вторая, собственно, с шифрованием.
  #7  
Старый 28.07.2008, 23:03
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
По моему, это архитектурная ошибка.
у тебя получается промежуточная длл, которая все-равно ничего не делает.
идея как раз именно та самая. мне и надо чтобы все работало по цепочке.

Цитата:
в зависимости от параметра подгружается одна или другая длл
нее)) может я что не понял... в моей задаче поставлен 1 параметр, 1 процедура, ссылающаяся на 1 dll, после этого уже в этой dll прописан код по перешифровки и как действовать дальше, отправлять данные в 2.dll или в 3.dll. разумеется 1.dll никаких результатов выдавать не будет, результат будет только выбора куда отправлять инфу дальше, вот и все

Последний раз редактировалось drkane, 28.07.2008 в 23:37.
  #8  
Старый 28.07.2008, 23:33
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

AlexSku, только я не пойму, можешь подсказать?
даже если в промежуточном dll тупо делать перенос инфы на другой dll, при компиляции приложение все равно выдает месагу написанного...
Project.exe
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;

begin
  s:= edit1.Text;
  kindtext(pchar(s));
1.dll
Код:
procedure kindtext(P:pchar); stdcall;
var
  result,s:string;
begin
  s:= strpas(P); 
  result:= s;
выдает сообщение с прописанным текстом, хотя я showmessage нигде не прописывал 0_о
дефект?))) как прописать dont showmessage ?
ЗЫ. твой код мне оч помог разобраться, где я сделал ошибку, спасибо
  #9  
Старый 29.07.2008, 16:14
dmdx dmdx вне форума
Начинающий
 
Регистрация: 24.05.2008
Адрес: Москва
Сообщения: 133
Репутация: 15
По умолчанию

Если юзаешь свои dll то смело можешь делать статическую подгрузку. Единственный минус в память все dll грузиться, но обработка быстрее происходит. думаю как подключать dll к exe знаешь а подключать dll к dll аналогично в первой dll делаешь ссылку на вторую dll
Код:
library 1.dll;
uses SysUtils;

function proc2(y: integer): integer; external '2.dll';

var
...

function proc1(x: integer):integer; stdcall; exports;
begin
result:=proc2(x);
end;
exports
proc1;

остально додумаешь. Я так до пяти библиотек подключал и все работает.
  #10  
Старый 29.07.2008, 16:48
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от dmdx
остально додумаешь. Я так до пяти библиотек подключал и все работает.
а у тебя не вылетали непрописанные мессаги? у меня вчера вылетали
причем я их не писал нигде...
2 библиотеки вчера связал, но почему то вылетает мессага с результатом первой длл, хотя showmessage у меня прописан на 2-й, а это еще как минимум через 2 процедуры и ф-цию. в результате получается 2 мессаги, вместо одной: 1-я с заданной инфой, 2-я уже с обработанной... чтото я делаю неправильно, хотя вроде все точно
  #11  
Старый 29.07.2008, 16:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А у тебя нигде в системном или текущем каталоге нет старой версии либы с сообщением?
  #12  
Старый 29.07.2008, 17:19
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

есть одна..., но у нее другое имя и мессага тоже не прописана... не задумывался, что это может быть из-за нее... конфликт может быть?

да она и к проекту никакого отношения не имеет.. по крайней мере в коде
  #13  
Старый 29.07.2008, 22:14
drkane drkane вне форума
Прохожий
 
Регистрация: 02.05.2008
Сообщения: 31
Репутация: 10
По умолчанию

есть! я разобрался в чем фишка!))) сам дурак, называется.
спасибо всем кто помогал)))
но, судя по тому как я ступил при компиляции, я еще вернусь
  #14  
Старый 09.08.2008, 20:34
Delphimen Delphimen вне форума
Прохожий
 
Регистрация: 01.07.2008
Сообщения: 3
Репутация: 10
Печаль

Люди помогите!!!! кто может написать код библиотек .dll с денамической загрузкой и со всеми прибомбасами!!! А то делаю по учебнику, а делфик выдает ошибку в коде!!!!
  #15  
Старый 10.08.2008, 12:35
Аватар для moo2k
moo2k moo2k вне форума
Активный
 
Регистрация: 05.12.2006
Адрес: где-то там...
Сообщения: 321
Репутация: 35
По умолчанию

Юзай функции WinAPI:
LoadLibrary(LibFileName: PChar) - загрузка указанной библиотеки LibFileName в память. При успешном завершении функция возвращает дескриптор (THandle) DLL в памяти.
GetProcAddress(Module: THandle; ProcName: PChar) - считывает адpес экспоpтиpованной библиотечной функции. При успешном завершении функция возвращает дескриптор (TFarProc) функции в загруженной DLL.
FreeLibrary(LibModule: THandle) - делает недействительным LibModule и освобождает связанную с ним память. Следует заметить, что после вызова этой процедуры функции данной библиотеки больше недоступны.

P.S. Google тебе в помощь. Он рулит. Учись пользоваться поиском и эксперементировать.
__________________
Программирование - это искусство и наш смысл жизни.
Закрытая тема


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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