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

Вниз

Регистрация, ловля и оправка сообщения   Найти похожие ветки 

 
-=GaLaN=- ©   (2003-12-15 15:19) [0]

Можно попросить уважаемых мастеров привести код как послать сообщение в свою программу из, например, dll"шки; как его словить в самой программе, послучив вместе с сообщением еще и строку с данными?


 
JibSkeart ©   (2003-12-15 15:21) [1]

SendMessage,PostMessage

Вобщем даже в хелпе есть примеры :))


 
-=GaLaN=- ©   (2003-12-15 15:24) [2]

Я, в принципе, представляю, как это делается. Но вот строку передать с сообщением - не знаю как. :(


 
Palladin ©   (2003-12-15 15:24) [3]

Send/PostMessage
в программе/форме соответственно реализуешь обработчики своих сообщений...
см. директиву message

если подразумевается передача данных, а не управление, то лучше использовать callback функции/процедуры, тоесть из приложения в dll производится передача адреса процедуры отвечающей за обработку данных и позже при необходимости вызывается в dll...


 
-=GaLaN=- ©   (2003-12-15 15:30) [4]

2Palladin:
Честно говоря, не помешает и то, и другое. ;) Передать-то надо всего одну строку, и не обязательно через dll. Поэтому message будет лучше.
Но если ты дашь примерчик и callbak функции, то я совсем будет признателен ;)


 
Palladin ©   (2003-12-15 17:18) [5]

Фрагмент библиотеки
type

TSendStringProc=procedure (const p_strData:string) of object; // stdcall - по вкусу

var
procCBSetStrWorkProc:TSendStringProc=nil;

procedure SetCBSendStringProc(p_procStrWork:TSendStringProc);
begin
@procCBSetStrWorkProc:=p_procStrWork;
end;

procedure DoSomething;
var
i:integer;
begin
for i:=0 to 4 do if @procCBSetStrWorkProc<>nil then
procCBSetStrWorkProc("String from DLL #"+IntToStr(i+1));
end;

Фрагмент приложения

type

TSendStringProc=procedure (const p_strData:string) of object; // stdcall - по вкусу

TForm1=class ...
procedure StrWork(const p_strData:string);
procedure InitLib;
...
end;

procedure TForm1.InitLib;
var
procSetCBStrWorkProc:procedure (p_procCBStrWork:TSendStringProc); //stdcall
begin
...
// получаем procSetCBStrWorkProc
procSetCBStrWorkProc(@StrWork);
...
end;

procedure TForm1.StrWork;
begin
ShowMessage(p_strData);
end;


писалось тут и поэтому не тестировалось


 
Silver Alex ©   (2003-12-15 17:43) [6]

можно еще вот так строку послать

SendMessage(self.Handle,wm_Main,0,integer(pchar(Edit1.Text)));


 
Palladin ©   (2003-12-15 17:54) [7]


> Silver Alex © (15.12.03 17:43) [6]

Два раза кастинг не надо делать. Просто
integer(s) или integer(Edit1.text)


 
Silver Alex ©   (2003-12-15 18:27) [8]


> Palladin © (15.12.03 17:54) [7]

ну не надо, так не надо :))



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

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

Наверх




Память: 0.48 MB
Время: 0.022 c
14-86509
Думкин
2003-12-05 05:15
2003.12.26
С днем рождения! 5 декабря.


3-86279
Andr_or
2003-12-03 10:25
2003.12.26
Компоненты Interbase c COM+


1-86389
FireMan_Alexey
2003-12-15 11:47
2003.12.26
Как можно настроить!


1-86334
Mishenka
2003-12-12 21:43
2003.12.26
Как обнулить содержимое StringGrid?


14-86525
SergP
2003-12-01 22:46
2003.12.26
Помогите написать Select