load wsock32.dll dynamically, so that wxCore has no dependency on it
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25745 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -99,6 +99,7 @@ wxCreateHiddenWindow(LPCTSTR *pclassname, LPCTSTR classname, WNDPROC wndproc);
|
|||||||
#error "MAXSOCKETS is too big!"
|
#error "MAXSOCKETS is too big!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef int PASCAL (*WSAAsyncSelectFunc)(SOCKET,HWND,u_int,long);
|
||||||
|
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
|
|
||||||
@@ -107,6 +108,8 @@ static HWND hWin;
|
|||||||
static CRITICAL_SECTION critical;
|
static CRITICAL_SECTION critical;
|
||||||
static GSocket* socketList[MAXSOCKETS];
|
static GSocket* socketList[MAXSOCKETS];
|
||||||
static int firstAvailable;
|
static int firstAvailable;
|
||||||
|
static WSAAsyncSelectFunc gs_WSAAsyncSelect = NULL;
|
||||||
|
static HMODULE gs_wsock32dll = 0;
|
||||||
|
|
||||||
/* Global initializers */
|
/* Global initializers */
|
||||||
|
|
||||||
@@ -129,6 +132,17 @@ int _GSocket_GUI_Init(void)
|
|||||||
}
|
}
|
||||||
firstAvailable = 0;
|
firstAvailable = 0;
|
||||||
|
|
||||||
|
/* Load WSAAsyncSelect from wsock32.dll (we don't link against it
|
||||||
|
statically to avoid dependency on wsock32.dll for apps that don't use
|
||||||
|
sockets): */
|
||||||
|
gs_wsock32dll = LoadLibraryA("wsock32.dll");
|
||||||
|
if (!gs_wsock32dll)
|
||||||
|
return FALSE;
|
||||||
|
gs_WSAAsyncSelect =(WSAAsyncSelectFunc)GetProcAddress(gs_wsock32dll,
|
||||||
|
"WSAAsyncSelect");
|
||||||
|
if (!gs_WSAAsyncSelect)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,6 +152,13 @@ void _GSocket_GUI_Cleanup(void)
|
|||||||
DestroyWindow(hWin);
|
DestroyWindow(hWin);
|
||||||
UnregisterClass(CLASSNAME, INSTANCE);
|
UnregisterClass(CLASSNAME, INSTANCE);
|
||||||
|
|
||||||
|
/* Unlock wsock32.dll */
|
||||||
|
if (gs_wsock32dll)
|
||||||
|
{
|
||||||
|
FreeLibrary(gs_wsock32dll);
|
||||||
|
gs_wsock32dll = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Delete critical section */
|
/* Delete critical section */
|
||||||
DeleteCriticalSection(&critical);
|
DeleteCriticalSection(&critical);
|
||||||
}
|
}
|
||||||
@@ -267,7 +288,7 @@ void _GSocket_Enable_Events(GSocket *socket)
|
|||||||
long lEvent = socket->m_server?
|
long lEvent = socket->m_server?
|
||||||
FD_ACCEPT : (FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE);
|
FD_ACCEPT : (FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE);
|
||||||
|
|
||||||
WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, lEvent);
|
gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, lEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,7 +301,7 @@ void _GSocket_Disable_Events(GSocket *socket)
|
|||||||
|
|
||||||
if (socket->m_fd != INVALID_SOCKET)
|
if (socket->m_fd != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0);
|
gs_WSAAsyncSelect(socket->m_fd, hWin, socket->m_msgnumber, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user