Главная страница
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.01 c
15-1307430272
RGV
2011-06-07 11:04
2011.10.02
Актуальность Delphi.


15-1306259758
R_R
2011-05-24 21:55
2011.10.02
Трехмерные шахматы


2-1308015939
vasja666
2011-06-14 05:45
2011.10.02
sql запрос дата


15-1307391683
GanibalLector
2011-06-07 00:21
2011.10.02
tcp over serial


15-1307593117
Sergey
2011-06-09 08:18
2011.10.02
перезагрузка адсл модема