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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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@@$$HYMHP01AP01APAAVString@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


Anmelden zum Antworten