我在x64平臺中使用IOCP時遇到了問題。IOCP無法在x64平臺上運行
當我在win32平臺上編譯我的代碼時,它運行良好。但是,當我將其更改爲x64平臺時,函數
GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,(PULONG_PTR)&PerHandleData, (LPOVERLAPPED*)&IpOverlapped, INFINITE)
返回true而不將值傳遞給PerHandleData。
PerHandleData被定義爲:
typedef struct
{
SOCKET socket;
SOCKADDR_STORAGE ClientAddr;
}PER_HANDLE_DATA,*LPPER_HANDLE_DATA;
LPPER_HANDLE_DATA PerHandleData;
這意味着,即使看起來與功能則GetQueuedCompletionStatus()沒有錯誤,結構PerHandleData無法讀取內存:插座無法讀取內存也是如此ClientAddr。沒有價值。
所以當它運行到功能WSARecv(PerHandleData->socket, &(PerIoData->databuff), 1, &RecvBytes, &Flags, &(PerIoData->overlapped), NULL)
;應用程序將停止出現內存錯誤。
誰能告訴我該如何處理?
我們需要看到更多的代碼。 –