![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как загруженной DLL выполнить Функцию (метод) основной программы? [D7, WinXP]
Alex_Mel © (2005-10-28 15:33:00)Здравствуйте.
Программа загружает библиотеку, которая при поступлении опред. события должна выполнить функцию, которая находится в основной программе. Как это реализовать?
Джо (2005-10-28 15:57:00) [21][5] Alex_Mel
> Так понятно? :)
Так понятно. Хотим невозможного.
Джо (2005-10-28 15:55:00) [22]Да, самое главное. Недостаточно просто "загрузить библиотеку".
Alex_Mel (2005-10-28 15:54:00) [23]Это как? Библиотека имеет много точек входа
Не понял.
Смысл в том, что DLL реагирует на событие операционной системы. Как только оно произошло, в ней срабатывает функция, которая в свою очередь должна, свой результат передать как аргумент другой ф-ии, но уже в главной программе.
Можно конечно по таймеру проверять, а не вернула ли у нас что-нить Dll, но хотелось бы, чтобы DLL сама запустила ее в нужный момент. Так понятно? :)
Джо (2005-10-28 15:54:00) [24]Или использовать механизм callback-вызовов (в том или ином виде), либо использовать механизм сообщений Windows. Можно и еще что-то экзотческое придумать, сейчас в голову не приходит. Ну, до кучи, ещи и возможности COM можно, вероятно, использовать.
Нужно более подробное описание конкретной задачи.
TUser (2005-10-28 15:52:00) [25]Библиотека
unit uMyUnit;
interface
type
TMyProc = procedure (V: integer);
implementation
end.
library Project1;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
uMyUnit in 'uMyUnit.pas';
{$R *.res}
procedure Test (Proc: TMyProc);
begin
Proc (5);
end;
exports Test;
begin
end.
Программа
uMyUnit - тот же
и
procedure Test (Proc: TMyProc); external 'Project1.dll';
procedure ThisProc (V: integer);
begin
ShowMessage(inttostr(V));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Test (ThisProc);
end;
Reindeer Moss Eater (2005-10-28 15:49:00) [26]callback
isasa (2005-10-28 15:46:00) [27]Программа загружает библиотеку, которая при поступлении опред. события должна выполнить функцию, которая находится в основной программе
Это как? Библиотека имеет много точек входа.