Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1144423880
Steplerr
2006-04-07 19:31
2006.05.28
Фильтр таблицы


2-1147159115
_duk
2006-05-09 11:18
2006.05.28
Получить значения


2-1147263371
VOIDER
2006-05-10 16:16
2006.05.28
выити из сервиса


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


15-1146423589
Yanis
2006-04-30 22:59
2006.05.28
Какие могут быть траблы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский