Fehler: einbinden von Headerdateien in CLR-Anwendung
-
Hi,
bekomme, die Fehlermeldung, dass es wohl ein Problem beim Einbinden, der Headerdateien #include <Windows.h> und #include <WinSock2.h> gibt...
Wollte diese in ein CLR Projekt unter VisualStudio einbinden um mir einen Simplen Netzwerkclienten zu bauen.Hier die Originale Fehler Meldung:
1>------ Build started: Project: Client, Configuration: Debug Win32 ------
1>Build started 2/8/2012 4:18:32 PM.
1>InitializeBuildStatus:
1> Touching "Debug\Client.unsuccessfulbuild".
1>GenerateTargetFrameworkMonikerAttribute:
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
1>ClCompile:
1> All outputs are up-to-date.
1> Client.cpp
1>Client.cpp(3): warning C4627: '#include <Windows.h>': skipped when looking for precompiled header use
1> Add directive to 'StdAfx.h' or rebuild precompiled header
1>Client.cpp(4): warning C4627: '#include <WinSock2.h>': skipped when looking for precompiled header use
1> Add directive to 'StdAfx.h' or rebuild precompiled header// Client.cpp : main project file. #include <Windows.h> #include <WinSock2.h> #include "stdafx.h" using namespace System; // Socket int protocol= 0; int type= SOCK_STREAM; int domain= 2; // AF_INET // Serveraddresse int port = 5000; const char* IP = "192.168.1.1"; int main(array<System::String ^> ^args) { long rc; // Winsock initialisieren WSADATA wsa; socket = WSAStartup(MAKEWORD(2,0), &wsa); if (rc != 0) { Console::WriteLine("Fehler: WSAStartup, konnte nicht initialisiert werden. %d", rc); } else { Console::WriteLine("Winsock wurde gestartet\n"); } // Socket anfordern int sockID = socket (domain, type, protocol); if (sockID == -1) { perror("socket()"); } else { Console:WriteLine("Socket ID erfolgreich geholt\n"); } // Verbinden zu... sockaddr_in serv_addr; //Server Informationen serv_addr.sinfamily = AF_INET; serv_addr.sin_port = htons (port); serv_addr.sin_addr.s_addr = inet_addr(IP); if (connect(sockID, (sockaddr *) &serv_addr, sizeof(sockaddr)) == -1) { perror ("connect()"); } // Senden des Befehls char *message = "Message"; if((send(sockID, *message, strlen(message); 0);) == -1) { perror("send()"); } Console::ReadLine();// // return 0; }
-
#include "stdafx.h"
MUSS immer an erster Stelle im *.cpp File stehen.
-
Danke erstmal... kannst du mir ein paar Worte dazu erzaehlen, warum?
Habs nun geaendert bekomme eine Fehlermeldung, die ich mir aber nicht erklaeren kann, was sie bedeutet...
1>Client.obj : error LNK2028: unresolved token (0A00001D) "extern "C" int __stdcall send(unsigned int,char const *,int,int)" (?send@@$$J216YGHIPBDHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2028: unresolved token (0A00001E) "extern "C" int __stdcall connect(unsigned int,struct sockaddr const *,int)" (?connect@@$$J212YGHIPBUsockaddr@@H@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2028: unresolved token (0A00001F) "extern "C" unsigned long __stdcall inet_addr(char const *)" (?inet_addr@@$$J14YGKPBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2028: unresolved token (0A000020) "extern "C" unsigned short __stdcall htons(unsigned short)" (?htons@@$$J14YGGG@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2028: unresolved token (0A000022) "extern "C" unsigned int __stdcall socket(int,int,int)" (?socket@@$$J212YGIHHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2028: unresolved token (0A000025) "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall send(unsigned int,char const *,int,int)" (?send@@$$J216YGHIPBDHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall connect(unsigned int,struct sockaddr const *,int)" (?connect@@$$J212YGHIPBUsockaddr@@H@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" unsigned long __stdcall inet_addr(char const *)" (?inet_addr@@$$J14YGKPBD@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" unsigned short __stdcall htons(unsigned short)" (?htons@@$$J14YGGG@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" unsigned int __stdcall socket(int,int,int)" (?socket@@$$J212YGIHHH@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
1>Client.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) referenced in function "int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHPAAVString@System@@@Z)
-
Das bedeuted der Compiler ist zufrieden, aber der Linker nicht. Deshalb musst Du noch die entsprechende Winsock Library dazulinken. z.B. so...
#include <winsock2.h> #pragma comment (lib, "ws2_32.lib") // ...
-
Super, dass hat funktioniert. Naechstes mal genauer in der MSDN nachschauen.
Kann mir denn dennoch jemand erklaeren, warum zuerst stdafx- Headerdatei eingebunden werden muss?
-
Suche mal nach Precompiled Headers...
-
Hier hat jemand eine Erkenntnis gewonnen.
[quote="XinCode"]Super, dass hat funktioniert. Naechstes mal genauer in der MSDN nachschauen.[/qoute]Nur um sie im nächten Augenblick zuverlieren.
Kann mir denn dennoch jemand erklaeren, warum zuerst stdafx- Headerdatei eingebunden werden muss?
Viel Spaß noch beim Proggen und bei den vielen Funz-Fragen, die da kommen werden.
Google mal RTFM