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

Вниз

О передаче данных из DLL в программу по событию   Найти похожие ветки 

 
konischev ©   (2006-05-08 10:23) [0]

Допустим у меня есть программа, для простоты на ней 2 кнопки. 1-я кнопка обращается в DLL и запускает таймер, 2-я останавливает. Таймер находится в DLL и скажем через 1 секунду производит какую-нибудь операцию и передает данные в программу. Как реализовать функцию в DLL которая периодически будет передавать данные в течение любого периода времени? Поиск не помог, была подобная тема, но кода не приведено.


 
TUser ©   (2006-05-08 10:28) [1]

OnTimer?


 
konischev ©   (2006-05-08 16:40) [2]

Да в данном случае по событию OnTimer.


 
Sphinx ©   (2006-05-08 17:27) [3]

Передавать в .dll указатель на процедуру.
А потом по указателю вызывать процедуру из библиотеки.


 
konischev ©   (2006-05-10 21:20) [4]

А если прога ругается при выполнении вот так "Invalid Pointer Operation", сейчас я просто пытаюсь написать DLL которая будет изменять Label в основной программе. Не пойму в чем вилы? Вроде Label то меняется, но блин ругается...


 
Leonid Troyanovsky ©   (2006-05-10 21:33) [5]


> konischev ©   (08.05.06 10:23)  

>  Таймер находится в DLL и скажем через 1 секунду производит
> какую-нибудь операцию и передает данные в программу. Как
> реализовать функцию в DLL которая периодически будет передавать


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

--
Regards, LVT.


 
Пусик ©   (2006-05-11 00:23) [6]


> konischev ©   (08.05.06 10:23)


DLL:

library DllTimer;

uses
 windows;

function StartTimer(Interval: DWORD; Proc: Pointer): DWORD; stdcall;
begin
 Result := SetTimer(0,0,Interval,Proc);
end;

procedure StopTimer(Timer: DWORD); stdcall;
begin
 KillTimer(0,Timer);
end;

exports
 StartTimer,
 StopTimer;
end.


Вызов:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Label1: TLabel;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Tick: Integer;
 Timer: DWORD;

function StartTimer(Interval: DWORD; Proc: Pointer): DWORD; stdcall; external "DllTimer.dll";
procedure StopTimer(Timer: DWORD); stdcall; external "DllTimer.dll";

implementation

{$R *.dfm}

procedure ProcTimer(HWND: HWND; uMsg: DWORD; idEvent: DWORD; dwTime: DWORD); stdcall;
begin
 Inc(Tick);
 Form1.Label1.Caption := IntToStr(Tick);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Tick := 0;
 Timer := StartTimer(10,@ProcTimer);
 if Timer=0 then raise Exception.Create("Ошибка при создании таймера");
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if Timer<>0 then
 begin
   StopTimer(Timer);
   Timer := 0;
 end;
end;

initialization
 Timer := 0;
end.


 
Leonid Troyanovsky ©   (2006-05-11 00:36) [7]


> Пусик ©   (11.05.06 00:23) [6]

>  Timer := StartTimer(10,@ProcTimer);


with TTimer.Create(nil) do

--
Regards, LVT.


 
Пусик ©   (2006-05-11 01:04) [8]


> Leonid Troyanovsky ©   (11.05.06 00:36) [7]


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


 
Leonid Troyanovsky ©   (2006-05-11 07:02) [9]


> Пусик ©   (11.05.06 01:04) [8]

> Пример дан не для того, чтобы решить именно задачу с таймером,


TTimer и делает подобную "обработку данных" из user32.dll.
Безотносительно левой dll.

--
Regards, LVT.


 
konischev ©   (2006-05-11 08:44) [10]

Спасибо большое за информацию!



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

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

Наверх




Память: 0.49 MB
Время: 0.06 c
11-1126546794
Stargazer
2005-09-12 21:39
2006.05.28
TOnMessage в новом KOL


15-1146232207
ruslan333
2006-04-28 17:50
2006.05.28
Проблема с запуском ISAPI-приложения


1-1145257574
MegaVolt
2006-04-17 11:06
2006.05.28
Как убить поток?


2-1147196525
Zikmu
2006-05-09 21:42
2006.05.28
Thumbnails


15-1146744905
Golik
2006-05-04 16:15
2006.05.28
Как создать резервную копию БД ?