2012-03-22 23 views
7

Nie miałem nic oprócz problemów z Winsockiem, odkąd zacząłem go używać. Nie mogę zainicjować Winsock, by uratować mi życie. Nie proszę nikogo o napisanie całego programu (Jak wiem, jak denerwuje to) potrzebuję pomocy w Winsock. Próbowałem kilku kompilatorów i zawsze dostaję dziwne błędy.Programowanie Winsock

1>Compiling... 
1>main.cpp 
1>Linking... 
1>main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
1>C:\Users\Rory\ProjectX\ProjectX\Debug\ProjectX.exe : fatal error LNK1120: 2 unresolved externals 
1>Build log was saved at "file://c:\Users\Rory\ProjectX\ProjectX\ProjectX\Debug\BuildLog.htm" 
1>ProjectX - 3 error(s), 0 warning(s) 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Oto mój kod:

#include <cstdlib> 
#include <iostream> 
#include <string.h> 
#include <winsock2.h> 

int iReqWinsockVer = 2; 

using namespace std; 

int main() 
{ 
    cout<<"Initializing Winsock 2...\n"; 

    // WINSOCK INITIALIZATION 

WSADATA wsaData; 

if (WSAStartup(MAKEWORD(iReqWinsockVer,0), &wsaData)==0) { 
    // Check if major version is at least iReqWinsockVer 
    if (LOBYTE(wsaData.wVersion) >= iReqWinsockVer) { 
     // Network stuff here 
    } 
    else { 
     // Required version not available 
    } 

    // Cleanup winsock 
    if (WSACleanup()!=0) { 
     // cleanup failed 
     } 
    } 
else { 
    // startup failed 
} 
    // END WINSOCK INITIALIZATION 

     system("PAUSE"); 
    } 

Odpowiedz

22

Dodaj ws2_32.lib jako wejście łącznika.

Projekt Ustawienia-> Linker-> input

Na tej stronie można zobaczyć dodatkowe zależności. Umieścić go tam - pamiętać, że nazwy bibliotek należy rozdzielając spacjami Albo można dodać tę linię bezpośrednio do pliku źródłowego:

#pragma comment(lib, "ws2_32.lib") 
+6

+1 - nie jest to zdalnie problem z inicjowaniem Winsock, tylko nierozstrzygnięty standardowy łącznik czasu budowania. –

0

Nie zapomnij zdefiniować WINDOWS_LEAN_AND_MEAN makro przed tym nagłówek okna. W przeciwnym razie dostaniesz mnóstwo błędów. To dlatego, że domyślnie nagłówek okna zawiera starą wersję winsock. Zawiera wiele rzeczy, które kolidują z nowym nagłówkiem winsock2. Ale definiując to makro, stary nagłówek winsock jest wykluczony.