Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

импорт функции в длл


Тимоха111 ©   (2011-02-02 02:10:00) 

В инете полно статей где описываются методы позволяющие использовать функции находящиеся в длл, но нигде не нашел обратный вызов, т.е. функция есть в программе, а надо вызвать ее в длл, это возможно?


Студент   (2011-02-03 13:47:00) [1]

Можно ещё передавать в dll (InitDll) указатель на функцию...


> Тимоха111   (02.02.11 13:04) [11]


Вы сами-то поняли что сказали? Зачем тогда вообще Dll? Самой программой и запускайте функцию...


> бессмысленное желание укусить себя за ухо


Хорошее сравнение... :)
"Я хочу укусить себя за ухо. Не получается. Что делать? Это вообще реализуемо стандартными методами (без хаков)?"


Игорь Шевченко   (2011-02-02 15:04:00) [2]


> то зачем в длл пихать все эти фунции, если можно просто
> вызвать на выполнение функцию находящеюся в основной программе,
>  дллкой


Функцию надо убрать из основной программы и перенести в другую DLL, которая будет вызываться первой DLL


Anatoly Podgoretsky   (2011-02-02 13:23:00) [3]

> Тимоха111  (02.02.2011 13:04:11)  [11]

Ты не понял, ДЛЛ (скрипач) не нужен.


Тимоха111   (2011-02-02 13:04:00) [4]

другая экзотика, если есть функция в основной программе, при выполнении которой вызываются другие функции из той же программы, то зачем в длл пихать все эти фунции, если можно просто вызвать на выполнение функцию находящеюся в основной программе, дллкой


sniknik   (2011-02-02 12:43:00) [5]

> Используется одним exe шником.
тогда смысла в dll = ноль. если только не в учебных целях или другая "экзотика".


Тимоха111   (2011-02-02 12:40:00) [6]

Используется одним exe шником.


Anatoly Podgoretsky   (2011-02-02 10:52:00) [7]

> Servy  (02.02.2011 03:30:05)  [5]

Учитывая, что библиотека используется многими ехешниками, это очень
сомнительное решение.


Servy   (2011-02-02 03:55:00) [8]


> Servy, огромное спасибо, вы мне очень помогли!

Очередной сумасшедший ученый ушел мастерить своего Франкенштейна, а я получается к этому руку приложил =_=. Правильно говорят, молчание - золото.


Тимоха111   (2011-02-02 03:42:00) [9]

Servy, огромное спасибо, вы мне очень помогли!


Servy   (2011-02-02 03:30:00) [10]


> Спасибо, функция, которую надо вызвать в основной программе,
>  никакие данные не передает в длл, она выполняется в программе,
>  просто нужно заставить длл выполнить ее :)


Вы хотите странного. Изложите конкретную задачу, а не бессмысленное желание укусить себя за ухо.


> Нет, не возможно.

Ну почему же? Бывают люди со вставными челюстями, вполне способные укусить себя за ухо... Другое дело, что обычно даже они этим не занимаются, но в целом им ничто не мешает это сделать:

Exe:
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TMainForm = class(TForm)
   Memo: TMemo;
   bClickMe: TButton;
   procedure bClickMeClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 MainForm: TMainForm;

implementation

{$R *.dfm}

procedure test;
begin
 MainForm.Memo.Lines.Add('test procedure called');
end;

exports
 test;

procedure TMainForm.bClickMeClick(Sender: TObject);
var
 H: THandle;
begin
 H := LoadLibrary('DllProject.dll');
 if H <> 0 then
   FreeLibrary(H);
end;

end.


Dll:
library DllProject;

uses
 Windows,
 SysUtils,
 Classes;

{$R *.res}

procedure test; external 'ExeProject.exe';

begin
 test;
end.


Тимоха111   (2011-02-02 02:37:00) [11]

Спасибо, функция, которую надо вызвать в основной программе, никакие данные не передает в длл, она выполняется в программе, просто нужно заставить длл выполнить ее :)


Германн   (2011-02-02 02:36:00) [12]


>  импорт функции в длл
>
> Тимоха111   (02.02.11 02:10)
>
> В инете полно статей где описываются методы позволяющие
> использовать функции находящиеся в длл, но нигде не нашел
> обратный вызов, т.е. функция есть в программе, а надо вызвать
> ее в длл, это возможно?
>

Нет, не возможно.


Servy   (2011-02-02 02:23:00) [13]

Предполагаю, что вам нужно то, что обычно называется callback. Пример:

type
 // TPrintProc должен быть описан одинаково как в dll, так и в основной
 // программе. Стоит подумать над тем, чтобы выделить ее в отдельный модуль,
 // который будет использоваться обоими проектами
 TPrintProc = procedure (Message: string);


В dll:

procedure SomeDllProc(Print: TPrintProc);
begin
 Print('Hello from dll'); // вызываем функцию основной программы из dll
end;


В exe:

procedure MyPrint(Message: string);
begin
 Writeln(Message);
end;

begin
 SomeDllProc(MyPrint);  
end.


Тимоха111   (2011-02-02 02:19:00) [14]

длл загружается динамически


Наверх

Титульная страница Поиск, карта сайта Написать письмо