Mam jak w temacie, dość uciążliwy problem z dołączeniem biblioteki WS2_32.lib do projektu pisanego w Visual Studio 2008. Nie wiem co mogę jeszcze zrobić w kwesti linkowania tej biblioteki.
Robię to w ten sposób Project -> Properties -> Configuration Properties -> Linker -> input -> Additional Dependecies - no i tu ustawiam ścieżkę do biblioteki wyżej wymienionej znajdującej się w katalogu Microsoft SDK. Próbowałem też zrobić to w ten sposób : #pragma comment(lib,“WS2_32.lib”).
Błedy jakie wyrzuca kompilator ewidentnie świadczą o braku dowiązania biblioteki :
Error 1 error LNK2028: unresolved token (0A00000B) “extern “C” int __stdcall WSACleanup(void)” (?WSACleanup@@$$J10YGHXZ) referenced in function “int __clrcall main(cli::array^)” (?main@@$$HYMHP$01AP$AAVString@System@@@Z) test.obj test
Error 2 error LNK2028: unresolved token (0A00000C) “extern “C” int __stdcall WSAStartup(unsigned short,struct WSAData *)” (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) referenced in function “int __clrcall main(cli::array^)” (?main@@$$HYMHP$01AP$AAVString@System@@@Z) test.obj test
Error 3 error LNK2019: unresolved external symbol “extern “C” int __stdcall WSACleanup(void)” (?WSACleanup@@$$J10YGHXZ) referenced in function “int __clrcall main(cli::array^)” (?main@@$$HYMHP$01AP$AAVString@System@@@Z) test.obj test
Proszę o pomoc, dawno już nie pisałem nic w C++, pamiętam, że kiedyś miałem już takie problemy… nie pamiętam jednak jak sobie z nimi poradziłem
Nie… W tym przypadku akurat bardziej wskazane jest powstrzymanie się od .Net’a moim zdaniem (plugin do gry). Poza tym Twoja sugestia a raczej odpowiedź pytaniem na pytanie nie rozwiązuje mojego problemu - ja nie proszę o to by ktoś mi doradził w czym pisać, proszę o pomoc w rozwiązaniu problemu na jaki się natknąłem. To wciąż aktualne… jeśli ktoś spotkał się z takim dziwactwem jak ja tu opisuje oraz rozwiązał problem to proszę o podzielenie się solucją… Być może coś jeszcze gdzieś trzeba ustawić no nie wiem…
Chcesz pisać w .NET jednocześnie się od niego powstrzymując?
Wydaje mi się, że skoro chcesz korzystać z funkcji zwykłego C/C++, to powinieneś zrobić projekt Win32 a nie CLR, żeby się tak nie gryzło. Próbowałeś już?
#pragma comment(lib,"WS2_32.lib")
#include "stdafx.h"
#include
#include
using namespace System;
int main(array ^args)
{
Console::WriteLine(L"Hello World");
WSADATA wsaData;
WORD version;
int error;
version = MAKEWORD( 2, 0 );
error = WSAStartup( version, &wsaData );
/* check for error */
if ( error != 0 )
{
/* error occured */
//return FALSE;
}
/* check for correct version */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 0 )
{
/* incorrect WinSock version */
WSACleanup();
//return FALSE;
}
return 0;
}
Oto cały kod… Ale przecież to nie kwestia tego jak inicjuję WSA, on po prostu nie rozumie tych funkcji, nie dołącza biblioteki … No ale rzeczywiście… może gdzieś jest idiotyczny błąd z mojej strony… już sam nie wiem. Aha dodam jeszcze, że ten kod jest tylko testowy… chciałem zobaczyć czy on w nowym projekcie mi dolinkuje tą bibliotekę… w projekcie właściwym jest ten sam problem…
To ja może jeszcze podam ścieżkę do biblioteki… może to nie ta biblioteka co trzeba w co wątpie :
“C:\Program Files (x86)\Microsoft SDKs\Windows\v5.0\Lib\IA64\WS2_32.lib” - tak to wygląda
pragma comment("WS2_32.lib")
#include "stdafx.h"
#include "winsock2.h"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsaData;
WORD version;
int error;
version = MAKEWORD( 2, 0 );
error = WSAStartup( version, &wsaData );
/* check for error */
if ( error != 0 )
{
/* error occured */
}
/* check for correct version */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 0 )
{
/* incorrect WinSock version */
WSACleanup();
}
return 0;
}
Bez .Net - to samo.
– Dodane 09.08.2009 (N) 19:46 –
Fiołek… może i mógłbym .Net’a użyć, ale tak jak powtarzam to plugin i ja tam wole, żeby były czyste funkcje z biblioteki tejże wykorzystywane… bez żadnych wrapperów, bo czyż nie jest tak że .Net korzysta też z winsocket ? Mnie się wydaje że to w .Necie zostało ładnie ukryte w klasach…
– Dodane 09.08.2009 (N) 19:49 –
Być może się mylę … być może powinienem nawet używać tego .Neta… ALE NIE O TO TU CHODZI… ja pytam po prostu dlaczego nie mogę dołączyć biblioteki WS2_32.lib, kiedy wydaję się że wszystko robię dobrze i to nie działa jednak… Mnie po prostu drażni takie coś… i to musi zostać przeze mnie rozwiązane prędzej czy później… Z WASZĄ POMOCĄ RZECZ JASNA