2013-11-14 3 views
0

Я немного запутался, я пытаюсь создать программу без внешних зависимостей (поэтому ее можно было легко портировать в UNIX, например), которая имеет возможности подключения сокетов. Но я не уверен, что я должен использовать?Confused about Winsock2.dll vs Winsock2.h?

Есть ли стандартная библиотека в Windows XP, 7, 8, которая может быть связана с ней, может выводить один exe, который может работать один (не зависит от DLL для работы)? Например, в UNIX я могу установить связь с сокетом и использовать sys/socket.h и иметь 95% UNIX без каких-либо действий.

ответ

0

Тот же код просто не подходит для обоих. Но вы можете использовать #ifdef WIN32, чтобы препроцессор рассматривал вещи Windows только при компиляции под Windows.

В заголовках:

#ifdef WIN32 
// Windows exclusive dependencies go here 
#include <windows.h> 
#include <winsock.h> 
#pragma comment(lib, "ws2_32.lib") 
#define close(s) closesocket(s) 
#else 
// Linux exclusive dependencies go here 
#include <sys/socket.h> 
#endif 

А внутри main() вам нужно будет сделать что-то вроде этого:

#ifdef WIN32 
WSADATA wsaData; 
WSAStartup(MAKEWORD(2, 2), &wsaData); 
#endif 

Я считаю, что это все, остальная часть API широко совместим с UNIX - использование сокетов.

+0

Требуется ли 'ws2_32.lib'' Wsock32.dll' или 'WS2_32.dll'? Я хочу использовать наименьшее количество «зависимостей», насколько это возможно. Но я не понимаю, почему существует 5 различных DLL с «носком» в нем. – Steven

+0

Он использует 'ws2_32.dll', его часть Windows и более легкую версию' wsock32.dll'. Я действительно не могу сказать разницы, я знаю только, что он меньше и использует меньше памяти. Но вы можете спокойно заменить 'wsock32.lib', если хотите. – Havenard

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