Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.02;
Скачать: CL | DM;

Вниз

Передача имени процедуры в Dll и вызов ее там   Найти похожие ветки 

 
Gu   (2011-06-09 22:09) [0]

Есть некая прога и Dll, которую она использует. Код обоих доступен. В dll в разное время возникает некоторое событие, которое инициирует процедуру X. Эта процедура доступна из проги, которая по таймеру ее опрашивает. После опроса выводится статистика из переменных, которые возвращает эта процедура.
Вопрос: допустим в проге есть процедура Y, которая выводит статистику процедуры X из dll. Можно ли и каким образом (желательно пример кода) передать имя процедуры Y в dll, чтобы она срабатывала в процедуре X. Или как отслеживать события процедуры X не по таймеру, а тогда, когда они возникают (в основной проге)?
P.S. Код из dll переносить в основную прогу нельзя.


 
Gu   (2011-06-09 23:07) [1]

делал сначала примерно так http://coderx.ru/showthread.php?t=1345 , но похоже это тупик. может еще идеи есть?


 
_Юрий   (2011-06-09 23:26) [2]

Передавать надо не имя процедуры, а указатель на нее.
Как передавать - точно также, как и внутри одной сборки.
Объявить процедурный тип, объявить параметр этого типа, передать в качестве нее процедуру, вызвать.


 
Gu   (2011-06-09 23:43) [3]

Чета я запутался немного:

В проге:

type
tmyproc=procedure;
...
var
myproc:tmyproc;
...

Procedure XX;
begin
showmessage("test");
end;

при подключении dll:

<получаем адрес и активизируем процедуру YY>
myproc:=xx;
YY(myproc);

--------------------------------
в длл

type
tmyproc1=procedure;
...
var
myproc1:tmyproc1;
...

Procedute YY(tmp:tmyproc1); // работает в начале, при подключении dll
begin
myproc1:=tmp;
end;

....
Procedure ZZ; // работает при событии
begin
...
Myproc1;
...
end;

компилируется норм, но при работе - выдает ошибку переполнение стека
может дадите краткий пример или скажете где нетак?


 
Gu   (2011-06-10 00:18) [4]

ага, все заработало, вопрос снят



Страницы: 1 вся ветка

Текущий архив: 2011.10.02;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
6-1242153569
Alex_C
2009-05-12 22:39
2011.10.02
Проблема с SendText в ctBlocking сокете


15-1307987145
Andrey K
2011-06-13 21:45
2011.10.02
Караул. Не запустить Delphi


2-1308301208
Sergey
2011-06-17 13:00
2011.10.02
Refresh таблицы


15-1307426451
RWolf
2011-06-07 10:00
2011.10.02
File timestamps backup/restore


2-1307898394
jobitn@mail.ru
2011-06-12 21:06
2011.10.02
помогите переделать на delphi! горюю