Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];
ВнизПосылка сообщения внутри 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c