Главная страница
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
15-1307391683
GanibalLector
2011-06-07 00:21
2011.10.02
tcp over serial


2-1307642941
Gu
2011-06-09 22:09
2011.10.02
Передача имени процедуры в Dll и вызов ее там


1-1267450439
apic
2010-03-01 16:33
2011.10.02
Как при компиляции автоматически поместить исходный код


2-1307876453
avil
2011-06-12 15:00
2011.10.02
Проверка в множестве


11-1238133138
imp
2009-03-27 08:52
2011.10.02
Проблема с VMHSyntaxEdit.