Где я могу найти нто? - PullRequest
       3

Где я могу найти нто?

0 голосов
/ 20 февраля 2012

Я ищу файл заголовка в Windows, который я могу использовать для получения функции ntohl в C, но Winsock2.h не будет работать для меня. Кто-нибудь знает, какие другие заголовочные файлы будут обеспечивать это?

Вот некоторые ошибки, которые я получаю, когда пытаюсь включить Winsock2.h

C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(1045): error #2120: Redeclaration of 'getservbyport', previously declared at C:\Program Files (x86)\PellesC\Include\Win\winsock.h(468); expected 'PSERVENT __stdcall function(int, const char *)' but found 'struct servent * __stdcall function(int, const char *)'.
C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(135): error #2123: Redefinition of 'hostent', previously defined at C:\Program Files (x86)\PellesC\Include\Win\winsock.h(91).
C:\Program Files (x86)\PellesC\Include\Win\ws2def.h(39): error #1050: Redefinition of macro 'AF_IPX'.
C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(1310): error #2121: Redeclaration of 'LPSOCKADDR_IN'.

Ответы [ 2 ]

6 голосов
/ 20 февраля 2012

Это в winsock2.h согласно документам MSDN и из моей системы разработки (в C:\Program files (x86) Microsoft SDKs\Windows\v7.0A\Include\Winsock2.h):

WINSOCK_API_LINKAGE u_long WSAAPI ntohl (__in u_long netlong);

Я не уверен, почему это "не работает" для вас. Если вы получаете сообщение об ошибке, вам необходимо опубликовать его.


Исходя из того, что ваш вопрос редактируется о том, почему у вас возникают проблемы с winsock2.h, похоже, вы пытаетесь включить оба winsock.h и winsock2.h - это редко хорошая идея :-) Они на самом деле фундаментально несовместимо, winsock2 является более поздней версией с дополнительными вкусностями.

К сожалению, это не всегда под вашим очевидным контролем, поскольку windows.h автоматически включает winsock.h для вас при большинстве обстоятельств.

По памяти, одним из способов решения этой проблемы является определение WIN32_LEAN_AND_MEAN перед включением windows.h. Это предотвратит включение некоторых из менее используемых заголовков.

Другой способ - определить _WINSOCKAPI_ перед включением windows.h - это также предотвратит включение winsock.h.

Третий (и, вероятно, предпочтительный) способ заключается в простом включении winsock2.h перед windows.h. winsock2.h определяет _WINSOCKAPI_, поэтому имеет тот же эффект, что и предыдущий абзац.

0 голосов
/ 26 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...