БОЛЬШОЙ FAQ ПО DELPHI



Что нужно давать WSAAsyncSelect в качестве параметра handle

Автор: Nomadic

Что нужно давать WSAAsyncSelect в качестве параметра handle, если тот запускается и используется в dll (init), и никакой формы (у которой можно было бы взять этот handle) в этой dll не создается?


 const
   WM_ASYNCSELECT = WM_USER + 0;
 
 type
   TNetConnectionsManager = class(TObject)
   protected
     FWndHandle: HWND;
     procedure WndProc(var MsgRec: TMessage);
     ...
   end;
 
 constructor TNetConnectionsManager.Create
 begin
   inherited Create;
   FWndHandle := AllocateHWnd(WndProc);
   ...
 end;
 
 destructor TNetConnectionsManager.Destroy;
 begin
   ...
     if FWndHandle <> 0 then
     DeallocateHWnd(FWndHandle);
   inherited Destroy;
 end;
 
 procedure TNetConnectionsManeger.WndProc(var MsgRec: TMessage);
 begin
   with MsgRec do
     if Msg = WM_ASYNCSELECT then
       WMAsyncSelect(MsgRec)
     else
       DefWindowProc(FWndHandle, Msg, wParam, lParam);
 end;
 

Hо pекомендую посмотpеть WinSock2, в котоpом можно:


 WSAEventSelect( FSocket, FEventHandle, FD_READ or FD_CLOSE );
 WSAWaitForMultipleEvents( ... );
 WSAEnumNetworkEvents( FSocket, FEventHandle, lpNetWorkEvents );
 

То есть, обойтись без окон и без очеpеди сообщений windows, а заодно иметь возможность pаботать и с IPX/SPX, и с netbios.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Видеокурс ВЗЛОМ