![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
импорт функции в длл
Тимоха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]длл загружается динамически