Войти
ФлеймФорумПрограммирование

Если бы вы писали WinAPI - как бы вы рассылали сообщения окнам? (21 стр)

Страницы: 120 21 22 2329 Следующая »
#300
9:51, 14 мая 2021

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


#301
10:19, 14 мая 2021

=A=L=X=

struct 
 MyMsg {
   MessageHeader header;
   double w;
   double t;
   double f;
};
MyMsg m;
...
PostMessage(m);
#302
(Правка: 10:32) 10:26, 14 мая 2021

А почему бы не делать произвольную структуру ?
И так можно каждый раз передавать разное число данных окну.

struct ResizebleMessage {
int NumElements  0;
int sizeinBytes      0;
int TypeData      0; //0-bytes,1-int,2 - float, 3-double float
ptrMemAdr  0;//pointer to data где лежат все значения.
}

И одно окно могло бы принять сразу несколько таких структур. Например 8 штук.

#303
(Правка: 10:30) 10:29, 14 мая 2021

Вий
> struct
> MyMsg {
> MessageHeader header;
> double w;
> double t;
> double f;
> };
> MyMsg m;
> ...
> PostMessage(m);
Это не скомпилируется даже - посмотри прототип ф-ии PostMessage в MSDN.
Не забывай что надо решить вопрос владения - кто убъёт MyMsg и когда.

Это ли не из серии "за удобство надо платить"? :D

#304
(Правка: 10:48) 10:48, 14 мая 2021

Блин, зря я напомнил про вопросы владения, мог бы подольше поглумиться тыкая носом в абсдрищ на абсдрище.

#305
10:56, 14 мая 2021

=A=L=X=
Ну ты спросил как бы я сделал, я показал. PostMessage Для C++ можно сделать удобной шаблонной оберткой. Передачу неведомо чего можно сделать например по значению, с копированием данных в принадлежащий ОС буфер, размер данных в Сишной Структуре кладут вместе с типом сообщения в заголовок. Общее первое поле заголовка в структурах всех типов сообщений позволяет этот заголовок читать не зная какое на самом деле дальше лежит сообщение.

#306
10:59, 14 мая 2021

Вий
> Ну ты спросил как бы я сделал, я показал.

Ты показал ошибку компиляции.
Ты вообще почти все неудобства передачи в switch фиксированных параметров умудрился "оставить за кадром".
Где взятие указателя? Где касты? Где вопросы владения?
Ничего ты понять так и не смог из обсуждения.

#307
11:04, 14 мая 2021

skalogryz
> NextStep
блин, я заглянул в википедию, там написано что MacOS Cocoa на этой технологии... но заглядывая глубже в MacOS - я так же наткнулся на этот свитч... (да по идее я всё и реализовал с его помощью).

#308
11:08, 14 мая 2021

Mirrel
> да по идее я всё и реализовал с его помощью

Эта идея не нова: https://gamedev.ru/flame/forum/?id=256451

#309
11:09, 14 мая 2021

=A=L=X=
> Ты вообще почти все неудобства передачи в switch фиксированных параметров
> умудрился "оставить за кадром".
Я не мог оставить их за кадром. Нельзя оставить за кадром то чего нет.

#310
11:48, 14 мая 2021

=A=L=X=
> Блин, зря я напомнил про вопросы владения
С вопросами владения, вообще говоря, всё настолько плохо, что орхетектура апи - далеко не первая по очерёдности проблема, если так по-хорошему-то. Я смутно подозреваю, что ком и .нет - это попытки м$ решить проблему передачи в IPC/RPC хотя бы стрингов. Судя по неоднократности попыток и занятого ими в итоге места в орхетектуре, они сочтены не то чтобы удачными, а где-то даже и вовсе ужасными.

#311
11:54, 14 мая 2021

Sbtrn. Devil
С вопросами владения все просто: владеть оконными сообщениями может только ОС. При отправлении сообщение копируется (при желании конечно можно позволить приложению получить буфер заранее и заполнить его, но это микрооптимизация), при получении читатель может читать из буфера до конца вызова обработчика. Если нужно больше - читатель волен делать копии

#312
12:57, 14 мая 2021

Вий
> Нельзя оставить за кадром то чего нет.

Ааа, т.е. ты всё-таки начал апгрейдить WndProc по своему. Если я правильно понял, то в него уходят структуры с заголовком по значению и в switch-е на каждый case происходит каст указателя к нужной структуре.
Ну вот же! Есть апгрейд. А говорили что как в винде норм.

#313
(Правка: 13:01) 12:59, 14 мая 2021

=A=L=X=
Ну да, ты все верно понял. Но это ведь чисто косметический апдейт, суть то не меняется. Ну и не обязательно по значению. В очередь встают по значению. А в wnd proc можно и по указателю или ссылке на константу прямо на то что в очереди

#314
13:01, 14 мая 2021

Sbtrn. Devil
> Я смутно подозреваю, что ком и .нет - это попытки м$ решить проблему передачи в
> IPC/RPC хотя бы стрингов.

Маршаллингу в COM посвящён огромный жирнейший кусок документации и он крайне важен, т.к. без него не работало бы OLE, а на OLE MS бросила лучшие умы нации.

Страницы: 120 21 22 2329 Следующая »
ФлеймФорумПрограммирование