请教高人关于vC 60 CONTAINING_RECORD宏的问题
扩展的结构如下
typedef struct _PER_IO_CONTEXT
{
WSAOVERLAPPED ol;
char szBuffer[BUFFER_SIZE];
WSABUF wsaBuffer;
SOCKET sClient;
unsigned int unId;
IO_OPERATION IoOperation;
_PER_IO_CONTEXT* pNext;
_PER_IO_CONTEXT()
{
ZeroMemory(szBuffer,BUFFER_SIZE);
pNext=NULL;
}
}PER_IO_CONTEXT, *PPER_IO_CONTEXT;
工作线程中:
PPER_HANDLE_CONTEXT lpHandleContext = NULL;
LPWSAOVERLAPPED lpOverlapped = NULL;
bSuccess = GetQueuedCompletionStatus(
pThis->m_hCOP,
&dwNumberBytes,
(LPDWORD)&lpHandleContext,
&lpOverlapped,
INFINITE
);
if (FALSE == bSuccess)
{
PPER_IO_CONTEXT lpPerIoContext = (PPER_IO_CONTEXT)lpOverlapped;
pThis->InsertToLookaside(lpPerIoContext, NULL);
pThis->InsertToLookaside(NULL, lpHandleContext);
continue;
}
// PPER_IO_CONTEXT lpPerIoContext = (PPER_IO_CONTEXT)lpOverlapped;
//用上面的没问题
PPER_IO_CONTEXT lpPerIoContext = CONTAINING_RECORD(lpOverlapped,PPER_IO_CONTEXT, ol);
编译无法通过提示错误"error C2227: left of '->ol' must point to class/struct/union"看了很多人的代码都是这么写的,不知道是不是需要在VC编译选项中设置