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

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

Как загруженной DLL выполнить Функцию (метод) основной программы? [D7, WinXP]


Страницы:   1 2

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]

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

Это как? Библиотека имеет много точек входа.


Страницы:   1 2

Наверх

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