Visual c++ ConnectEx在哪里定义?

Visual c++ ConnectEx在哪里定义?,visual-c++,windows-7,asynchronous,connect,Visual C++,Windows 7,Asynchronous,Connect,我想在Windows7和MSVC2010上使用ConnectEx函数 我收到错误C3861:“ConnectEx”:找不到标识符 MSDN建议该函数应该在mswsock.h中声明,但是,当检查它时,它没有在那里定义 有什么建议吗?如果你进一步阅读你提到的内容,它会说: 注意必须获取ConnectEx函数的函数指针 在运行时,通过使用 指定了SIO获取扩展函数指针操作码。输入缓冲区 传递给WSAIoctl函数的必须包含一个 全局唯一标识符(GUID),其值标识连接器 扩展功能。成功时,WSAIoc

我想在Windows7和MSVC2010上使用ConnectEx函数

我收到错误C3861:“ConnectEx”:找不到标识符

MSDN建议该函数应该在mswsock.h中声明,但是,当检查它时,它没有在那里定义

有什么建议吗?

如果你进一步阅读你提到的内容,它会说:

注意必须获取ConnectEx函数的函数指针 在运行时,通过使用 指定了SIO获取扩展函数指针操作码。输入缓冲区 传递给WSAIoctl函数的必须包含一个 全局唯一标识符(GUID),其值标识连接器 扩展功能。成功时,WSAIoctl返回的输出 函数包含指向ConnectEx函数的指针。这个 WSAID_CONNECTEXGUID在Mswsock.h头文件中定义

与其他Windows API函数不同,必须在运行时加载
ConnectEx()
,因为头文件实际上不包含
ConnectEx()
的函数声明(它确实为名为
LPFN\u ConnectEx
的函数提供了
typedef
)而且文档中没有特别提到要使其工作必须链接到的特定库(其他Windows API函数通常都是这样)

下面是一个示例,说明了如何使其工作(为了说明,省略了错误检查):

#include//必须包含在Mswsock.h之前
#包括
//如果尚未为链接器指定此库,则为必需
#pragma注释(lib,“Ws2_32.lib”)
/* ... */
套接字s=/*…*/;
DWORD numBytes=0;
GUID=WSAID_CONNECTEX;
LPFN_CONNECTEX ConnectExPtr=NULL;
int success=::WSAIoctl(s,SIO_GET_EXTENSION_函数_指针,
(void*)和guid,sizeof(guid),(void*)和ConnectExPtr,sizeof(ConnectExPtr),
&numBytes,NULL,NULL);
//检查WSAGetLastError()!
/* ... */
//假设指针不为NULL,可以使用正确的参数调用它。
ConnectExPtr、名称、名称、lpSendBuffer、,
dwSendDataLength、lpdwBytesSent、lpOverlapped);

+代码片段如何执行此操作:
#include <Winsock2.h> // Must be included before Mswsock.h
#include <Mswsock.h>

// Required if you haven't specified this library for the linker yet
#pragma comment(lib, "Ws2_32.lib")

/* ... */

SOCKET s = /* ... */;
DWORD numBytes = 0;
GUID guid = WSAID_CONNECTEX;
LPFN_CONNECTEX ConnectExPtr = NULL;
int success = ::WSAIoctl(s, SIO_GET_EXTENSION_FUNCTION_POINTER,
    (void*)&guid, sizeof(guid), (void*)&ConnectExPtr, sizeof(ConnectExPtr),
    &numBytes, NULL, NULL);
// Check WSAGetLastError()!

/* ... */

// Assuming the pointer isn't NULL, you can call it with the correct parameters.
ConnectExPtr(s, name, namelen, lpSendBuffer,
    dwSendDataLength, lpdwBytesSent, lpOverlapped);