Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1214636002
Kolan
2008-06-28 10:53
2008.08.17
Все отстрелялся, теперь я учёный! :)


15-1214980131
ЮЮ
2008-07-02 10:28
2008.08.17
Есть что ли бо типа ShellExecute в WBA ?


2-1216187859
savyhinst
2008-07-16 09:57
2008.08.17
Как инвертировать цвета TBitmap?


2-1215717621
Виктор007
2008-07-10 23:20
2008.08.17
Вынести в dll класс


2-1216104030
workbench
2008-07-15 10:40
2008.08.17
модальное окно





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский