gpt4 book ai didi

c++ - 使用 LoadLibrary 和 GetProcAddress 调用 WinSock 函数

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:19 24 4
gpt4 key购买 nike

基本上我有这样一个头文件:

#if WIN32
typedef DWORD (WSAAPI *SocketStartup) (WORD wVersionRequested, LPWSADATA lpWSAData);
typedef SOCKET (WINAPI *MakeSocket)(IN int af, IN int type, IN int protocol, IN LPWSAPROTOCOL_INFOW lpProtocolInfo, IN GROUP g, IN DWORD dwFlags );
typedef DWORD (WINAPI *SocketSendFunc) (IN SOCKET s,__in_bcount(len) const char FAR * buf, IN int len,IN int flags);
typedef DWORD (WINAPI *GetLastSocketErrorFunc)();
typedef DWORD (WINAPI *ShutdownSocketFunc)(SOCKET hSocket, int how);
typedef DWORD (WINAPI *CloseSocketFunc)(SOCKET hSocket);
#endif

然后我做这样的事情:

    SocketStartup* start = (SocketStartup*)GetProcAddress(socketLib,"WSAStartup");
getLastSocketError = (GetLastSocketErrorFunc*)GetProcAddress(socketLib,"WSAGetLastError");
closeSocket = (CloseSocketFunc*)GetProcAddress(socketLib,"closesocket");
shutdownSocket = (ShutdownSocketFunc*) GetProcAddress(socketLib,"shutdown");
socketSend = (SocketSendFunc*) GetProcAddress(socketLib, "send");
if(start == 0 || getLastSocketError == 0 || closeSocket == 0 || shutdownSocket == 0
|| socketSend == 0)
{
printf("[!] Failed to find entry points in Ws2_32.dll. Error Code: %d\n", GetLastError());
CloseLibraries();
ErrorExit();
}
WSADATA wsdata;

//ZeroMemory(&wsdata,sizeof(wsdata));
printf("error: %d\n", GetLastError());
WORD test = MAKEWORD(1,1);
int result = (*start)(test, &wsdata);
return result == 0;

但是,当我调用此函数(带有 (*start)(test, &wsdata) 的行)时,我收到此错误消息:

Unhandled exception at 0x7868146a in sockets.exe: 0xC0000005: Access violation.

我尝试更改调用约定(__cdecl、WINAPI、WSAAPI),但它总是以相同的错误消息结束。

最佳答案

考虑到您对 Remus Rusanu 的回复,如果您这样做的原因只是为了在不同平台之间移植,那么在导入级别进行抽象是做您想要的事情的错误方法。例如,不同平台上看起来相似的套接字函数将返回的错误代码各不相同(不仅在它们的 ID/编号上,而且在含义和可用性上)。

我以前做过这个,并在平台特定的套接字函数(或必要时的多个函数)周围使用简短的包装函数,翻译错误消息等,以便它们对我的应用程序是统一的 WRT;我为每个平台都有一个单独的文件/实现。效果很好。

关于c++ - 使用 LoadLibrary 和 GetProcAddress 调用 WinSock 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com