2013-08-08 4 views
0

Согласно MSDN (VS2012 version), sockaddr_in определен в winsock2.h. Исключений нет (аналогично тому, что мы видим в Windows Phone и некоторых вызовах API). Тем не менее, когда я пытаюсь скомпилировать файл, который использует sockaddr_in и включает в себя winsock2.h, я получаю ошибку компиляции (см. Ниже).Где находится sockaddr_in в Windows RT?

Обратите внимание, что я не получил ошибку winsock2.h not found (или аналогичный). Также обратите внимание, что тот же код компилируется на Windows Phone 8.

Что нужно включить для WinRT?

 cl /Fotmp32dll\bss_conn.obj -Iinc32 -Itmp32dll -DOPENSSL_THREADS -W3 - 
Gs0 -GF -Gy -nologo -DOPENSSL_SYSNAME_WINRT -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_ 
CRT_SECURE_NO_DEPRECATE -I\usr\local\ssl\fips-2.0/include /nologo /D NDEBUG /D _ 
USRDLL /D _WINDLL /D WINAPI_FAMILY=WINAPI_PARTITION_APP /FI SDKDDKVer.h /FI wina 
pifamily.h -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_KRB5 -DOPENSSL_NO_ENGI 
NE -DOPENSSL_NO_HW -DOPENSSL_FIPS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_STATIC_ENGINE 
/Zi /Fdtmp32dll/lib -DOPENSSL_BUILD_SHLIBCRYPTO -c .\crypto\bio\bss_conn.c 
bss_conn.c 
.\crypto\bio\bss_conn.c(95) : error C2079: 'them' uses undefined struct 'sockadd 
r_in' 
.\crypto\bio\bss_conn.c(207) : error C2224: left of '.sin_family' must have stru 
ct/union type 
.\crypto\bio\bss_conn.c(207) : error C2065: 'AF_INET' : undeclared identifier 
.\crypto\bio\bss_conn.c(208) : error C2224: left of '.sin_port' must have struct 
/union type 
.\crypto\bio\bss_conn.c(208) : warning C4013: 'htons' undefined; assuming extern 
returning int 
.\crypto\bio\bss_conn.c(214) : error C2224: left of '.sin_addr' must have struct 
/union type 
.\crypto\bio\bss_conn.c(214) : warning C4013: 'htonl' undefined; assuming extern 
returning int 
.\crypto\bio\bss_conn.c(217) : warning C4013: 'socket' undefined; assuming exter 
n returning int 
.\crypto\bio\bss_conn.c(217) : error C2065: 'AF_INET' : undeclared identifier 
.\crypto\bio\bss_conn.c(217) : error C2065: 'SOCK_STREAM' : undeclared identifie 
r 
.\crypto\bio\bss_conn.c(217) : error C2065: 'IPPROTO_TCP' : undeclared identifie 
r 
.\crypto\bio\bss_conn.c(218) : error C2065: 'INVALID_SOCKET' : undeclared identi 
fier 
.\crypto\bio\bss_conn.c(220) : warning C4013: 'WSAGetLastError' undefined; assum 
ing extern returning int 
.\crypto\bio\bss_conn.c(260) : warning C4013: 'connect' undefined; assuming exte 
rn returning int 
.\crypto\bio\bss_conn.c(366) : error C2065: 'INVALID_SOCKET' : undeclared identi 
fier 
.\crypto\bio\bss_conn.c(379) : error C2065: 'INVALID_SOCKET' : undeclared identi 
fier 
.\crypto\bio\bss_conn.c(383) : warning C4013: 'shutdown' undefined; assuming ext 
ern returning int 
.\crypto\bio\bss_conn.c(384) : warning C4013: 'closesocket' undefined; assuming 
extern returning int 
.\crypto\bio\bss_conn.c(385) : error C2065: 'INVALID_SOCKET' : undeclared identi 
fier 
.\crypto\bio\bss_conn.c(422) : warning C4013: 'WSASetLastError' undefined; assum 
ing extern returning int 
.\crypto\bio\bss_conn.c(423) : warning C4013: 'recv' undefined; assuming extern 
returning int 
.\crypto\bio\bss_conn.c(447) : warning C4013: 'send' undefined; assuming extern 
returning int 
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0 
\VC\bin\x86_ARM\cl.EXE"' : return code '0x2' 
Stop. 
+3

Winsock в приложении WinRT не допускается, а также многие другие функции winapi. Он несовместим с изолированной песочницей приложения. Вместо этого вы должны использовать классы замены WinRT. Остерегайтесь того, что локальный loopback также не разрешен. –

+0

Спасибо Хансу. Мой самый большой разрыв кажется качественной документацией. Где найти документацию? Я хотел бы получить что-то, что было написано для качества серии [Advanced Windows] (http://www.amazon.com/Advanced-Windows-Jeffrey-Richter/dp/1572315482) для WinRT и Windows Phone 8. В двух книгах Windows Phone я оставляю желать лучшего (и не часто перекрещиваюсь с WinRT). – jww

+0

Быстрый вопрос Ганс: «Winsock запрещен в приложении WinRT» - мы переносим библиотеку, а не создаем приложение. Есть ли что-то, что мы должны делать по-другому, чтобы получить библиотеку, поскольку это не приложение для разработки приложений? (Просто спрашивайте о полноте). – jww

ответ

0

Это ошибка компоновщика, а не ошибка компилятора.

.h файлы не участвуют в процессе связывания. Вам нужно включить в него некоторый .lib-файл.

// Нужно связать с Ws2_32.lib, Mswsock.lib и Advapi32.lib

http://msdn.microsoft.com/en-us/library/windows/desktop/ms737591(v=vs.85).aspx

редактировать: упс, да это компилятор. Тем не менее, проверьте исходный код, который я связал с

+0

Спасибо xaxxon. Согласно [Альтернативам Windows API в приложениях Windows Store] (http://msdn.microsoft.com/en-us/library/windows/apps/hh464945.aspx), Winsock недоступен. Мои результаты, похоже, подтверждают отсутствие Winsock (наряду с комментариями Хан). Я попрошу об этом Microsoft. Windows RT отстой, и отсутствие четкой документации действительно отстой. – jww

1

Обратите внимание, что с версии Visual Studio 2013 Update 4 winsock можно использовать в приложениях Windows Store. (Это не относится к исходному вопросу, но я добавляю это, если другие люди найдут этот вопрос в будущем).

+0

Спасибо, Питер. Итак, я понятен - это относится к Windows RT? – jww

+0

Да. И Windows Phone поддерживает WinSock с 8.0 –

Смежные вопросы