Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизО передаче данных из 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c