Windows hc как подключиться

Обновлено: 07.07.2024

Функция accept разрешает попытку входящего соединения через сокет.

Синтаксис

Параметры

Дескриптор, идентифицирующий сокет, который был переведен в состояние прослушивания с помощью функции прослушивания. Соединение фактически устанавливается с помощью сокета, возвращаемого accept.

Необязательный указатель на буфер, который получает адрес подключающегося объекта, известный коммуникационному уровню. Точный формат параметра addr определяется семейством адресов, которое было установлено при создании сокета из структуры sockaddr.

Необязательный указатель на целое число, содержащее длину структуры, на которую указывает параметр addr.

Возвращаемое значение

Если ошибок не возникает, accept возвращает значение типа SOCKET, которое является дескриптором нового сокета. Это возвращаемое значение является дескриптором сокета, на котором установлено фактическое соединение.

В противном случае возвращается значение INVALID_SOCKET, и конкретный код ошибки можно получить, вызвав WSAGetLastError.

Целое число, на которое ссылается addrlen, изначально содержит количество места, на которое указывает addr. При возврате он будет содержать фактическую длину возвращаемого адреса в байтах.

< td width="40%">WSAEINTR < tr>
Код ошибки Значение
WSANOTINITIALISED Перед использованием этой функции должен произойти успешный вызов WSAStartup.
WSAECONNRESET Было указано входящее соединение, но впоследствии оно было разорвано удаленным узлом до принятия вызова.
WSAEFAULT Параметр addrlen слишком мал или addr не является допустимой частью адресного пространства пользователя.
Блокирующий вызов Windows Sockets 1.1 был отменен с помощью WSACancelBlockingCall.
WSAEINVAL Функция прослушивания не была вызвана перед принятием.
WSAEINPROGRESS Выполняется блокирующий вызов Windows Sockets 1.1, или поставщик услуг все еще обрабатывает функцию обратного вызова.
WSAEMFILE Очередь не пуста при входе на прием, и нет доступных дескрипторов.
WSAENETDOWN Сбой сетевой подсистемы.
WSAENOBUFS Нет свободного места в буфере.
WSAENOTSOCK Дескриптор не является сокетом.
WSAEOPNOTSUPP Указанный сокет не является сокетом. тип, который поддерживает службу, ориентированную на соединение.
WSAEWOULDBLOCK Сокет помечается как неблокирующий и нет соединений, которые можно было бы принять.

Примечания

Функция accept извлекает первое соединение из очереди ожидающих соединений на сокете s. Затем он создает и возвращает дескриптор нового сокета. Вновь созданный сокет — это сокет, который будет обрабатывать фактическое соединение; он имеет те же свойства, что и сокет s, включая асинхронные события, зарегистрированные с помощью функций WSAAsyncSelect или WSAEventSelect.

Функция принятия может заблокировать вызывающую сторону до тех пор, пока не появится соединение, если в очереди нет ожидающих соединений, а сокет помечен как блокирующий. Если сокет помечен как неблокирующий и в очереди нет ожидающих соединений, accept возвращает ошибку, как описано ниже. После успешного завершения accept возвращает новый дескриптор сокета, принятый сокет нельзя использовать для приема дополнительных соединений. Исходный сокет остается открытым и ожидает новых запросов на подключение.

Параметр addr — это результирующий параметр, который заполняется адресом подключающегося объекта, известным коммуникационному уровню. Точный формат параметра addr определяется семейством адресов, в котором происходит связь. addrlen — это параметр «значение-результат»; изначально он должен содержать количество места, на которое указывает addr; при возврате он будет содержать фактическую длину (в байтах) возвращаемого адреса.

Функция accept используется с типами сокетов, ориентированными на соединение, такими как SOCK_STREAM. Если addr и/или addrlen равны NULL, то информация об удаленном адресе принятого сокета не возвращается.

Примечание. При выполнении блокирующего вызова Winsock, такого как accept, Winsock может потребоваться дождаться сетевого события, прежде чем вызов сможет завершиться. В этой ситуации Winsock выполняет ожидание с предупреждением, которое может быть прервано асинхронным вызовом процедуры (APC), запланированным в том же потоке.Выполнение другого блокирующего вызова Winsock внутри APC, прервавшего текущий блокирующий вызов Winsock в том же потоке, приведет к неопределенному поведению и никогда не должно предприниматься клиентами Winsock.

Пример кода

Другой пример использования функции accept см. в разделе Начало работы с Winsock.

Примечания для банкомата

Следующие важные вопросы, связанные с настройкой подключения, необходимо учитывать при использовании асинхронного режима передачи (ATM) с Windows Sockets 2:

  • Функции accept и WSAAccept не обязательно устанавливают параметры удаленного адреса и длины адреса. Следовательно, при использовании ATM вызывающая сторона должна использовать функцию WSAAccept и поместить ATM_CALLING_PARTY_NUMBER_IE в элемент ProviderSpecific структуры QoS, который сам включен в параметр lpSQOS функции обратного вызова, используемой в соответствии с WSAAccept.
  • При использовании функции принятия помните, что функция может вернуться до того, как установление соединения преодолеет все расстояние между отправителем и получателем. Это связано с тем, что функция accept возвращает значение, как только получает сообщение CONNECT ACK; в ATM сообщение CONNECT ACK возвращается следующим коммутатором на пути, как только сообщение CONNECT обрабатывается (а не сообщение CONNECT ACK, отправляемое конечным узлом, с которым в конечном итоге устанавливается соединение). Таким образом, приложения должны осознавать, что если данные отправляются сразу после получения сообщения CONNECT ACK, возможна потеря данных, поскольку соединение между отправителем и получателем может быть установлено не полностью.

Windows 8.1 и Windows Server 2012 R2: эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версиях.

В этом модуле мы напишем минимальную настольную программу для Windows. Все, что он делает, это создает и показывает пустое окно. Эта первая программа содержит около 50 строк кода, не считая пустых строк и комментариев. Это будет наша отправная точка; позже мы добавим графику, текст, пользовательский ввод и другие функции.

Если вам нужны дополнительные сведения о том, как создать традиционное настольное приложение для Windows в Visual Studio, ознакомьтесь с Пошаговым руководством. Создание традиционного настольного приложения для Windows (C++).

снимок экрана примера программы

Вот полный код программы:

Вы можете скачать полный проект Visual Studio из примера Windows Hello World.

Может быть полезно дать краткое описание того, что делает этот код. В последующих темах код будет рассмотрен подробно.

  1. wWinMain — это точка входа в программу. Когда программа запускается, она регистрирует некоторую информацию о поведении окна приложения. Одним из наиболее важных элементов является адрес функции, названной в этом примере WindowProc. Эта функция определяет поведение окна — его внешний вид, взаимодействие с пользователем и т. д.
  2. Затем программа создает окно и получает дескриптор, который однозначно идентифицирует окно.
  3. Если окно создано успешно, программа входит в цикл while. Программа остается в этом цикле, пока пользователь не закроет окно и не выйдет из приложения.

Обратите внимание, что программа не вызывает явно функцию WindowProc, хотя мы сказали, что именно здесь определяется большая часть логики приложения. Windows взаимодействует с вашей программой, передавая ей серию сообщений. Код внутри цикла while управляет этим процессом. Каждый раз, когда программа вызывает функцию DispatchMessage, она косвенно заставляет Windows вызывать функцию WindowProc один раз для каждого сообщения.

Функция WSAConnect устанавливает соединение с другим сокет-приложением, обменивается данными соединения и указывает требуемое качество обслуживания на основе указанной структуры FLOWSPEC.

Синтаксис

Параметры

Дескриптор, идентифицирующий неподключенный сокет.

Указатель на структуру sockaddr, указывающую адрес для подключения. Для IPv4 sockaddr содержит AF_INET для семейства адресов, IPv4-адрес назначения и порт назначения. Для IPv6 структура sockaddr содержит AF_INET6 для семейства адресов, IPv6-адрес назначения, порт назначения и может содержать дополнительную информацию о потоке и идентификаторе области действия.

Длина в байтах структуры sockaddr, на которую указывает параметр name.

Указатель на пользовательские данные, которые должны быть переданы в другой сокет во время установления соединения. См. примечания.

Указатель на пользовательские данные, которые должны быть переданы обратно из другого сокета во время установления соединения. См. примечания.

Указатель на структуры FLOWSPEC для сокета s, по одному для каждого направления.

Зарезервировано для будущего использования с группами сокетов. Указатель на структуры FLOWSPEC для группы сокетов (если применимо). Этот параметр должен иметь значение NULL.

Возвращаемое значение

Если ошибки не возникает, WSAConnect возвращает ноль. В противном случае возвращается SOCKET_ERROR, и конкретный код ошибки можно получить, вызвав WSAGetLastError. В блокирующем сокете возвращаемое значение указывает на успех или неудачу попытки подключения.

  • Используйте select, чтобы определить завершение запроса на подключение, проверив, доступен ли сокет для записи.
  • Если ваше приложение использует WSAAsyncSelect для индикации интереса к событиям подключения, ваше приложение получит уведомление FD_CONNECT, когда операция подключения будет завершена (успешно или нет).
  • Если ваше приложение использует WSAEventSelect для индикации интереса к событиям соединения, то соответствующий объект события будет сигнализировать о завершении операции соединения (успешно или нет).

Если возвращаемый код ошибки указывает на неудачную попытку подключения (то есть WSAECONNREFUSED, WSAENETUNREACH, WSAETIMEDOUT), приложение может снова вызвать WSAConnect для того же сокета.

< td width="60%">Параметр s является прослушивающим сокетом, или указанный адрес назначения не соответствует адресу ограниченной группы, к которой принадлежит сокет, или lpGQOS< Параметр /i> не равен NULL. < /tr>
Код ошибки Значение
WSANOTINITIALISED Перед использованием этой функции должен произойти успешный вызов WSAStartup.
WSAENETDOWN Сбой сетевой подсистемы.
WSAEADDRINUSE Локальный адрес сокета уже use, а сокет не был помечен для повторного использования адреса с помощью SO_REUSEADDR. Эта ошибка обычно возникает во время выполнения привязки, но может быть отложена до этой функции, если функция привязки работает с частично подстановочным адресом (включая ADDR_ANY) и если во время этой функции необходимо «зафиксировать» определенный адрес.< /td>
WSAEINTR Вызов (блокирующий) Windows Socket 1.1 был отменен с помощью WSACancelBlockingCall.
WSAEINPROGRESS Выполняется блокирующий вызов Windows Sockets 1.1, или поставщик услуг все еще обрабатывает функцию обратного вызова .
WSAEALREADY На указанном сокете выполняется неблокирующее соединение или вызов WSAConnect.< /td>
WSAEADDRNOTAVAIL Удаленный адрес не является допустимым (например, ADDR_ANY).
WSAEAFNOSUPPORT Адреса из указанного семейства нельзя использовать с этим socket.
WSAECONNREFUSED Попытка подключения была отклонена.
WSAEFAULT Параметр name или namelen не является часть адресного пространства пользователя, параметр namelen слишком мал, длина буфера для lpCalleeData, lpSQOS и lpGQOS< /i> слишком малы, или длина буфера для lpCallerData слишком велика.
WSAEINVAL
WSAEISCONN Сокет уже подключен (соединение- только ориентированные сокеты).
WSAENETUNREACH В данный момент сеть недоступна с этого хоста .
WSAEHOSTUNREACH Попытка выполнения операции сокета на недостижимом хосте.
WSAENOBUFS Нет свободного места в буфере. Сокет не может быть подключен.
WSAENOTSOCK Дескриптор не является сокетом.
WSAEOPNOTSUPP Структуры FLOWSPEC, указанные в lpSQOS и lpGQOS< /i> не может быть удовлетворен.
WSAEPROTONOSUPPORT lpCallerData параметр не поддерживается поставщиком услуг.
WSAETIMEDOUT Попытка подключения истекла без установления соединение.
WSAEWOULDBLOCK Сокет помечен как неблокирующий, и соединение не может быть установлено немедленно .
WSAEACCES Попытка подключить сокет дейтаграммы к широковещательному адресу не удалась, так как setsockopt SO_BROADCAST не включен .

Примечания

Функция WSAConnect используется для создания подключения к указанному месту назначения и для выполнения ряда других вспомогательных операций, выполняемых во время подключения. Если сокет s не связан, система присваивает уникальные значения локальной ассоциации, а сокет помечается как связанный.

Для приложений, ориентированных на Windows Vista и более поздние версии, рассмотрите возможность использования функции WSAConnectByList или WSAConnectByName, которые значительно упрощают разработку клиентского приложения.

Для сокетов, ориентированных на соединение (например, типа SOCK_STREAM), активное соединение с внешним хостом инициируется с помощью name (адрес в пространстве имен сокета; подробное описание см. см. привязку). Когда этот вызов завершается успешно, сокет готов к отправке/получению данных. Если параметр адреса структуры name полностью равен нулю, WSAConnect вернет ошибку WSAEADDRNOTAVAIL. Любая попытка восстановить активное подключение завершится ошибкой с кодом WSAEISCONN.

Примечание. Если сокет открыт, выполняется вызов setsockopt, а затем выполняется вызов sendto, Windows Sockets выполняет неявный вызов функции связывания.

Для неблокирующих сокетов, ориентированных на соединение, часто невозможно установить соединение немедленно. В таких случаях эта функция возвращает ошибку WSAEWOULDBLOCK. Однако операция продолжается. Когда становится известен результат успеха или неудачи, об этом может быть сообщено одним из нескольких способов в зависимости от того, как клиент регистрируется для получения уведомления. Если клиент использует select, об успехе сообщается в наборе writefds, а об ошибке сообщается в наборе exceptfds. Если клиент использует WSAAsyncSelect или WSAEventSelect, уведомление объявляется с помощью FD_CONNECT, а код ошибки, связанный с FD_CONNECT, указывает либо на успех, либо на конкретную причину сбоя.

Для сокета без установления соединения (например, типа SOCK_DGRAM) операция, выполняемая WSAConnect, заключается в том, чтобы просто установить адрес назначения по умолчанию, чтобы сокет можно было использовать в последующих операциях отправки и получения, ориентированных на установление соединения (отправка, WSASend, recv и WSARecv). Любые дейтаграммы, полученные с адреса, отличного от указанного адреса получателя, будут отброшены. Если вся структура имени состоит из нулей (а не только адресный параметр структуры имени), то сокет будет отключен. Тогда удаленный адрес по умолчанию будет неопределенным, поэтому вызовы send, WSASend, recv и WSARecv вернут код ошибки WSAENOTCONN. Однако по-прежнему можно использовать sendto, WSASendTo, recvfrom и WSARecvFrom. Назначение по умолчанию можно изменить, просто снова вызвав WSAConnect, даже если сокет уже подключен. Любые дейтаграммы, находящиеся в очереди на получение, отбрасываются, если имя отличается от предыдущего WSAConnect.

Для сокетов без установления соединения name может указывать любой действительный адрес, включая широковещательный адрес. Однако для подключения к широковещательному адресу в сокете должен быть включен setockopt SO_BROADCAST. В противном случае WSAConnect завершится ошибкой с кодом WSAEACCES.

В сокетах без установления соединения обмен данными между пользователями невозможен, и соответствующие параметры будут молча игнорироваться.

Приложение отвечает за выделение любого пространства памяти, на которое прямо или косвенно указывает любой из указанных им параметров.

Параметр lpCallerData содержит указатель на любые пользовательские данные, которые должны быть отправлены вместе с запросом на подключение (так называемые данные подключения). Это дополнительные данные, не входящие в обычный поток сетевых данных, которые отправляются с сетевыми запросами для установления соединения. Этот параметр используется устаревшими протоколами, такими как DECNet, OSI TP4 и другими.

Примечание. Данные Connect не поддерживаются протоколом TCP/IP в Windows. Данные подключения поддерживаются только в ATM (RAWWAN) через необработанный сокет.

Если lpCallerData имеет значение NULL, никакие пользовательские данные не будут переданы узлу. lpCalleeData — это параметр результата, который будет содержать любые пользовательские данные, переданные обратно из другого сокета как часть установления соединения в структуре WSABUF. Член len структуры WSABUF, на который указывает параметр lpCalleeData, изначально содержит длину буфера, выделенного приложением для члена buf структуры WSABUF. Член len структуры WSABUF, на который указывает параметр lpCalleeData, будет установлен равным нулю, если никакие пользовательские данные не были переданы обратно. Информация lpCalleeData будет действительна после завершения операции подключения. Для блокирующих сокетов операция подключения завершается, когда возвращается функция WSAConnect. Для неблокирующих сокетов завершение будет после появления уведомления FD_CONNECT. Если lpCalleeData имеет значение NULL, никакие пользовательские данные не будут переданы обратно. Точный формат пользовательских данных зависит от семейства адресов, к которому принадлежит сокет.

Во время подключения приложение может использовать параметр lpSQOS и lpGQOS, чтобы переопределить любую предыдущую спецификацию качества обслуживания, сделанную для сокета через WSAIoctl, с помощью SIO_SET_QOS или SIO_SET_GROUP_QOS. код операции.

Параметр lpSQOS указывает структуры FLOWSPEC для сокета s, по одной для каждого направления, за которыми следуют любые дополнительные параметры, зависящие от поставщика. Если либо связанный поставщик транспорта в целом, либо конкретный тип сокета в частности не может выполнить запрос качества обслуживания, будет возвращена ошибка, как показано ниже. Значения спецификации потока отправки или получения будут игнорироваться соответственно для любых однонаправленных сокетов. Если параметры, зависящие от провайдера, не указаны, члены buf и len структуры WSABUF, на которые указывает параметр lpCalleeData, должны быть установлены в NULL и ноль соответственно. Значение NULL для параметра lpSQOS указывает на отсутствие предоставляемого приложением качества обслуживания.

Зарезервировано для будущего использования с группами сокетов. lpGQOS указывает структуры FLOWSPEC для группы сокетов (если применимо), по одной для каждого направления, за которыми следуют любые дополнительные параметры, зависящие от провайдера. Если параметры, зависящие от провайдера, не указаны, члены buf и len структуры WSABUF, на которые указывает параметр lpCalleeData, должны быть установлены в NULL и ноль соответственно. Значение NULL для lpGQOS указывает на отсутствие предоставляемого приложением группового качества обслуживания. Этот параметр будет игнорироваться, если s не является создателем группы сокетов.

Когда подключенные сокеты по какой-либо причине закрываются, их следует удалить и создать заново. Безопаснее всего предположить, что, когда по какой-либо причине что-то пойдет не так с подключенным сокетом, приложение должно отбросить и создать заново необходимые сокеты, чтобы вернуться к стабильной точке.

Примечание. При выполнении блокирующего вызова Winsock, такого как WSAConnect, Winsock может потребоваться дождаться сетевого события, прежде чем вызов сможет завершиться. В этой ситуации Winsock выполняет ожидание с предупреждением, которое может быть прервано асинхронным вызовом процедуры (APC), запланированным в том же потоке. Выполнение другого блокирующего вызова Winsock внутри APC, прервавшего текущий блокирующий вызов Winsock в том же потоке, приведет к неопределенному поведению и никогда не должно предприниматься клиентами Winsock.

Windows Phone 8: эта функция поддерживается для приложений Windows Phone Store в Windows Phone 8 и более поздних версиях.

Windows 8.1 и Windows Server 2012 R2: эта функция поддерживается для приложений Магазина Windows в Windows 8.1, Windows Server 2012 R2 и более поздних версиях.

Файлы заголовков для Windows API позволяют создавать 32- и 64-разрядные приложения. Они включают объявления для версий API как для Unicode, так и для ANSI. Дополнительные сведения см. в разделе Юникод в Windows API. Они используют типы данных, которые позволяют создавать как 32-, так и 64-разрядные версии вашего приложения из единой базы исходного кода. Дополнительные сведения см. в разделе Подготовка к 64-разрядной версии Windows. К дополнительным функциям относятся аннотации заголовков и СТРОГАЯ проверка типов.

Visual C++ и заголовочные файлы Windows

Microsoft Visual C++ включает копии файлов заголовков Windows, которые были актуальны на момент выпуска Visual C++. Поэтому, если вы устанавливаете обновленные заголовочные файлы из SDK, на вашем компьютере может оказаться несколько версий заголовочных файлов Windows. Если вы не убедитесь, что используете последнюю версию файлов заголовков SDK, вы получите следующий код ошибки при компиляции кода, использующего функции, появившиеся после выпуска Visual C++: ошибка C2065: необъявленный идентификатор.

Макросы для условных объявлений

Некоторые функции, зависящие от конкретной версии Windows, объявляются с использованием условного кода. Это позволяет вам использовать компилятор для определения того, использует ли ваше приложение функции, которые не поддерживаются в его целевых версиях Windows. Чтобы скомпилировать приложение, использующее эти функции, необходимо определить соответствующие макросы. В противном случае вы получите сообщение об ошибке C2065.

В файлах заголовков Windows используются макросы, чтобы указать, какие версии Windows поддерживают многие программные элементы. Следовательно, вы должны определить эти макросы, чтобы использовать новые функции, представленные в каждом основном выпуске операционной системы. (В отдельных файлах заголовков могут использоваться разные макросы, поэтому, если возникают проблемы с компиляцией, проверьте файл заголовков, содержащий определение, на наличие условных определений.) Для получения дополнительной информации см. SdkDdkVer.h.

В следующей таблице описаны предпочтительные макросы, используемые в файлах заголовков Windows. Если вы определяете NTDDI_VERSION, вы также должны определить _WIN32_WINNT.

< /tr> < tr> < /tr> < td>Windows XP с пакетом обновления 1 (SP1)
Минимальная требуемая система Значение NTDDI_VERSION
Windows 10 1903 " 19H1" NTDDI_WIN10_19H1 (0x0A000007)
Windows 10 1809 "Redstone 5" NTDDI_WIN10_RS5 (0x0A000006)
Windows 10 1803 "Redstone 4" NTDDI_WIN10_RS4 (0x0A000005)
Windows 10 1709 "Redstone 3" NTDDI_WIN10_RS3 (0x0A000004)
Windows 10 1703 "Redstone 2" NTDDI_WIN10_RS2 (0x0A000003)
Windows 10 1607 "Redstone 1" NTDDI_WIN10_RS1 (0x0A000002)
Windows 10 1511 "Threshold 2" NTDDI_WIN10_TH2 (0x0A000001)
Windows 10 1507 "Порог" NTDDI_WIN10 (0x0A000000)
Windows 8.1 NTDDI_WINBLUE (0x06030000)
Windows 8 NTDDI_WIN8 (0x06020000)
Windows 7 NTDDI_WIN7 (0x06010000)
Windows Server 2008 NTDDI_WS08 (0x06000100)
Windows Vista с пакетом обновления 1 (SP1) NTDDI_VISTASP1 (0x06000100)
Windows Vista NTDDI_VISTA (0x06000000)
Windows Server 2003 с пакетом обновления 2 (SP2) NTDDI_WS03SP2 (0x05020200)
Windows Server 2003 с пакетом обновления 1 (SP1) NTDDI_WS03SP1 (0x05020100)
Windows Server 2003 NTDDI_WS03 (0x05020000)
Windows XP с пакетом обновления 3 (SP3) NTDDI_WINXPSP3 (0x05010300)
Windows XP с пакетом обновления 2 (SP2) NTDDI_WINXPSP2 (0x05010200)
NTDDI_WINXPSP1 (0x05010100)
Windows XP NTDDI_WINXP (0x05010000)< /td>

В следующих таблицах описаны другие макросы, используемые в файлах заголовков Windows.

Минимальная требуемая система Минимальное значение для _WIN32_WINNT и WINVER
Windows 10 _WIN32_WINNT_WIN10 (0x0A00)
Windows 8.1 _WIN32_WINNT_WINBLUE (0x0603)
Windows 8 _WIN32_WINNT_WIN8 (0x0602)
Windows 7 _WIN32_WINNT_WIN7 (0x0601)
Windows Server 2008 _WIN32_WINNT_WS08 (0x0600)
Windows Vista _WIN32_WINNT_VISTA (0x0600)
Windows Server 2003 с пакетом обновления 1 (SP1), Windows XP с пакетом обновления 2 (SP2) _WIN32_WINNT_WS03 (0x0502)
Windows Server 2003 , Windows XP _WIN32_WINNT_WINXP (0x0501)

< /tr>
Требуется минимальная версия Минимальное значение _WIN32_IE
Internet Explorer 11.0 _WIN32_IE_IE110 (0x0A00)
Internet Explorer 10.0 _WIN32_IE_IE100 (0x0A00)
Internet Explorer 9.0 _WIN32_IE_IE90 (0x0900)
Internet Explorer 8.0 _WIN32_IE_IE80 (0x0800)
Internet Explorer 7.0 _WIN32_IE_IE70 (0x0700)
Internet Explorer 6.0 SP2 _WIN32_IE_IE60SP2 ( 0x0603)
Internet Explorer 6.0 SP1 _WIN32_IE_IE60SP1 (0x0601)
Internet Explorer 6.0 _WIN32_IE_IE60 (0x0600)
Internet Explorer 5.5 _WIN32_IE_IE55 (0x0550)
Internet Explorer 5.01 _WIN32_IE_IE501 (0x0501)
Internet Explorer 5.0, 5.0a, 5.0b _WIN32_IE_IE50 (0x0500)< /td>

Настройка WINVER или _WIN32_WINNT

Например, чтобы установить WINVER в исходном файле, используйте следующую инструкцию:

Чтобы установить _WIN32_WINNT в исходном файле, используйте следующий оператор:

Чтобы установить _WIN32_WINNT с помощью параметра компилятора /D, используйте следующую команду:

cl -c /D_WIN32_WINNT=0x0502 исходный код.cpp

Информацию об использовании параметра компилятора /D см. в разделе /D (определения препроцессора).

Обратите внимание, что некоторые функции, представленные в последней версии Windows, могут быть добавлены в пакет обновлений для предыдущей версии Windows. Поэтому, чтобы настроить пакет обновления, вам может потребоваться определить _WIN32_WINNT со значением для следующего основного выпуска операционной системы. Например, функция GetDllDirectory появилась в Windows Server 2003 и определяется условно, если _WIN32_WINNT имеет значение 0x0502 или больше. Эта функция также была добавлена ​​в Windows XP с пакетом обновления 1 (SP1). Поэтому, если бы вы определили _WIN32_WINNT как 0x0501 для целевой Windows XP, вы бы упустили функции, определенные в Windows XP с пакетом обновления 1 (SP1).

Управление упаковкой структуры

Быстрая сборка с меньшими файлами заголовков

Вы можете уменьшить размер заголовочных файлов Windows, исключив некоторые менее распространенные объявления API следующим образом:

Определите WIN32_LEAN_AND_MEAN, чтобы исключить такие API, как криптография, DDE, RPC, Shell и сокеты Windows.

Читайте также: