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

Вниз

Посылка сообщения внутри DLL.   Найти похожие ветки 

 
Новичек ©   (2008-07-11 09:29) [0]

Уважаемые Мастера, здравствуйте.
В своей программе я посылал сообщение таким образом:

WSAAsyncSelect(WorkedSocket, frmMain.Handle, WM_Any, FD_Read);

Т.е. сообщение посылается главной форме. Решил я код перенести в DLL, а кому теперь посылать сообщение? Прошу прощения за, возможно, ламерский вопрос.
Спасибо.


 
Dennis I. Komarov ©   (2008-07-11 09:34) [1]

> frmMain.Handle

А вот это что?


 
Новичек ©   (2008-07-11 09:40) [2]


> А вот это что?

Это было в проге. А сейчас формы нет.


 
Dennis I. Komarov ©   (2008-07-11 09:43) [3]

> А сейчас формы нет

Тогда зачем что-то посылать?


 
Сергей М. ©   (2008-07-11 10:21) [4]


> я посылал сообщение таким образом:
>
> WSAAsyncSelect


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


> формы нет


На форме свет что ли клином сошелся ?

Нужно окно ? Возьми да создай его вызовом AllocateHwnd(). Только не забудь его вовремя уничтожить - DeallocateHwnd()


 
Новичек ©   (2008-07-11 11:12) [5]


> Тогда зачем что-то посылать?

Необходимо обработать ивенты от сокета.


> Сергей М.

Это я понимаю. Но как обработать ивенты от сокета в DLL?


 
Сергей М. ©   (2008-07-11 11:28) [6]


> как обработать ивенты от сокета в DLL?


Точно так же как в каком-либо ином модуле


 
Новичек ©   (2008-07-11 11:47) [7]


> Точно так же как в каком-либо ином модуле

Если я правильно понял, необходимо создать окно и в функции WindowProc всё обработать?


 
Сергей М. ©   (2008-07-11 12:09) [8]

Не только это но и в том числе и в первую очередь.

Еще надо всерьез задуматься о том, где, в каком месте кода того или иного модуля (в составе твоего приложения), каким образом и при каких условиях будет осуществляться выборка и диспетчеризация оконных сообщений, в результате чего собственно и будет вызываться этот самый WindowProc..


 
Новичек ©   (2008-07-11 12:59) [9]


> Сергей М.

Всё, дошло наконец-то :-) Спасибо огромное.


 
Сергей М. ©   (2008-07-11 13:53) [10]

А чем не угодила WSAEventSelect ? Или вообще блокирующий режим ? Или неблокирующий, но без нотификаций ?


 
Новичек ©   (2008-07-11 14:02) [11]


> Сергей М.

А с этим я ввобще не сталкивался :-(


 
Сергей М. ©   (2008-07-11 14:14) [12]

В самую пору будет столкнуться)

А то тебя основательно заклинило на окнах)


 
Сергей М. ©   (2008-07-11 14:16) [13]

А то не ровен час придется мигрировать на другую платформу, где этих самых "окон" и в помине нет, но сокеты там при этом как-то умудряются и без "окон" обходиться)


 
Новичек ©   (2008-07-11 14:26) [14]


> Сергей М.

Обманул. Порылся в исходниках - делал ведь года 2 назад, работало.
Что-то типа этого:

pEvent := WSACreateEvent();

 FillChar(vSockAddr, SizeOf(TSockAddr), 0);
 vSockAddr.sin_family := AF_INET;
 vSockAddr.sin_port := htons(5000);
 vSockAddr.sin_addr.S_addr := inet_addr("10.42.1.47");

 vSocket := WinSock2.Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

 if vSocket = INVALID_SOCKET then Halt(1);
 WSAEventSelect(vSocket, pEvent, FD_READ);

 repeat
   WinSock2.Connect(vSocket, @vSockAddr, SizeOf(vSockAddr));
 until ConnectError <> 10035;

 if ConnectError = SOCKET_ERROR then Halt(1);

 WSAWaitForMultipleEvents(1, @pEvent, FALSE, WSA_INFINITE, FALSE);
 WSAResetEvent(pEvent);
 Recv(vSocket, aBuf_MGAAR, SizeOf(aBuf_MGAAR), 0);

 WSAWaitForMultipleEvents(1, @pEvent, FALSE, WSA_INFINITE, FALSE);
 WSAResetEvent(pEvent);
 repeat
   Recv(vSocket, aBuf_MGAAR, SizeOf(aBuf_MGAAR), 0);
 until Pos("<", aBuf_MGAAR) <> 0;


Как Вы оцениваете этот код? Может, что не так? Это мой первый опыт по программированию сокетов подобным образом.


 
Сергей М. ©   (2008-07-11 14:32) [15]

Оцениваю на удовлетворительно с минусом)

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


 
Новичек ©   (2008-07-11 14:36) [16]

В общем, я и не претендовал на нечто большее :-)
Сейчас посижу, попытаюсь поправить, чтобы код был покрасивее :-)


 
Сергей М. ©   (2008-07-11 14:51) [17]


> посижу, попытаюсь поправить, чтобы код был покрасивее


Тут не "поправлять" надобно, а полностью его переписывать !



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

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

Наверх




Память: 0.51 MB
Время: 0.018 c
2-1216187859
savyhinst
2008-07-16 09:57
2008.08.17
Как инвертировать цвета TBitmap?


3-1204202412
makz
2008-02-28 15:40
2008.08.17
Обновление НД


2-1215693583
Chuck Loon
2008-07-10 16:39
2008.08.17
Excel - изображение в ячеёке


2-1215677312
Геннадий
2008-07-10 12:08
2008.08.17
Найти и удалить одинаковые вхождения в StringList ?


15-1214737296
ProgRAMmer Dimonych
2008-06-29 15:01
2008.08.17
Как лучше сделать