Windows API: неопределенная ссылка на DisconnectEx - PullRequest
3 голосов
/ 23 августа 2011

Я занимаюсь разработкой приложения, использующего сокеты Windows. В моем классе сокетов есть метод с именем Disconnect, который использует DisconnectEx, но я получаю следующую ошибку во время компоновки:

undefined reference to `DisconnectEx@16'

Я использую MinGW и связываю свое приложение со следующими библиотеками:

-lws2_32 -lwsock32 -lmswsock

В msdn говорится, что минимальная версия, необходимая для этой функции, - Windows XP или Windows Server 2003, поэтому я определил WINVER с 0x0502, но я все еще получаю ту же ошибку.

Что мне здесь не хватает?

Заранее спасибо!

1 Ответ

2 голосов
/ 23 августа 2011

То, что вы явно пропустили, это примечание в документации MSDN для функции DisconnectEx() :

Примечание: Указатель функции для функции DisconnectEx должен быть полученный во время выполнения путем вызова функции WSAIoctl с указан код операции SIO_GET_EXTENSION_FUNCTION_POINTER. Вход буфер, передаваемый в функцию WSAIoctl, должен содержать WSAID_DISCONNECTEX, глобально уникальный идентификатор (GUID), значение которого определяет функцию расширения DisconnectEx. В случае успеха вывод, возвращаемый функцией WSAIoctl, содержит указатель на DisconnectEx функция. GUID WSAID_DISCONNECTEX определен в заголовочный файл Mswsock.h.

Обратите внимание, что в документации MSDN для DisconnectEx() не указана библиотека в разделе «Требования». Это означает, что вам необходимо динамически загружать эту функцию во время выполнения через WSAIoctl() функцию , чтобы получить указатель на функцию.

...