MSVC 2005 Programm läuft nicht auf anderem Rechner



  • Hallo,

    ich spiele gerade etwas mit Winsocks herum und habe ein Programm aus einem Tutorial selbst compiliert. Auf dem Rechner auf dem es compiliert wurde läuft Win7 + MSVC2005 und das Programm selbst auch ganz gut.

    Das System auf dem ich den Client versucht habe zu starten ist ein älterer XP Rechner ohne MSVC.

    Das Programm lässt sich aus der Konsole einfach nicht starten.
    "Das Programm konnte nicht ausgeführt werden..." oder so ähnlich.

    Ich habe wie hier in der faq beschrieben bereits in MSVC "Use of MFC" auf "Use MFC in a Static Library" umgestellt, das hat zwar die Datei vergrößert aber keine Abhilfe geschaffen. Bin noch Anfänger und mit MSVC noch nicht so ganz vertraut.

    Ich hoffe jemand kann helfen.

    Danke schon mal

    Hier der Code

    #include <winsock2.h>
    #include <windows.h>
    #include <cstdio>
    #include <iostream>
    
    #pragma comment( lib, "ws2_32.lib" )
    
    int start_Winsock();
    
    long Get_address_from_String(char* hostname_or_IP, SOCKADDR_IN* addr);
    
    int main(int argc, char** argv){
    
    	char buf[256];
    	long rc;
    	SOCKET s;
    	SOCKADDR_IN addr;
    
    	if(argc<2)
    	{
    
    		printf("Usage: sock <hostname or IP des Servers>\n");
    		return 1;
    
    	}
    
    	rc=start_Winsock();
    
    	if (rc!=0)
    	{
    
    			printf("Fehler: start_Winsock Fehlercode %d \n" , rc);
    
    			return 1;
    	}
    
    	else 
    	{
    		printf("Winsock gestartet!\n");
    
    	}
    
    	s=socket(AF_INET,SOCK_STREAM,0);
    
    	if(s==INVALID_SOCKET)
    	{
    
    		printf("Fehler: Der Socket konnte nicht erstellt werden %d \n", WSAGetLastError());
    		return 1;
    
    	}
    
    	else
    	{
    
    		printf("Socket erstellt! \n");
    
    	}
    
    	memset(&addr,0,sizeof(SOCKADDR_IN));
    	addr.sin_family=AF_INET;
    	addr.sin_port=htons(123456);
    
    	rc=Get_address_from_String(argv[1],&addr);
    
    	if(rc==SOCKET_ERROR)
    	{
    
    		printf("IP für %s konnte nicht aufgelöst werden!\n", argv[1]);
    		return 1;
    
    	}
    
    	else
    
    	{
    
    		printf("IP aufgelöst.\n");
    
    	}
    
    	rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    
    	if(rc==SOCKET_ERROR)
    	{
    		printf("Fehler: connect gescheitert. Fehler Code %d \n", WSAGetLastError());
    		return 1;
    	}
    
    	else
    	{
    		printf("Verbunden mit 127.0.0.1 \n");
    	}
    
    	strcpy(buf,"Hallo wie gehts?");
    	rc=send(s,buf,16,0);
    
    	if(rc==SOCKET_ERROR)
    	{
    
    		printf("Fehler: send gescheitert. Fehler Code %d \n", WSAGetLastError());
    		return 1;
    
    	}
    
    	else 
    
    	{
    
    		printf("Übertragung erfolgreich, es wurden %d" , WSAGetLastError(), "Bytes uebertragen");
    
    	}
    
    	system("pause");
    	return 0;
    }
    
    long Get_address_from_String(char* hostname_or_IP, SOCKADDR_IN* addr){
    
    	long			rc;
    	HOSTENT*		he;
    	unsigned long	ip;
    
    	if(hostname_or_IP==NULL || addr==NULL)
    	{
    
    		return SOCKET_ERROR;
    
    	}
    
    	ip=inet_addr(hostname_or_IP);
    
    	if(ip!=INADDR_NONE)
    	{
    
    		addr->sin_addr.s_addr=ip;
    		return 0;
    
    	}
    
    	else
    
    	{
    
    		he=gethostbyname(hostname_or_IP);
    
    		if(he=NULL)
    		{
    
    			return SOCKET_ERROR;
    
    		}
    
    		else
    		{
    
    			memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    
    		}
    		return 0;
    	}
    }
    
    int start_Winsock(){
    	WSADATA wsa;
    
    	return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    




  • Deine Anleitung war sehr gut zu verstehen und zu befolgen, nur geht es immer noch nicht.

    Auf deinem Blog in den Kommentaren schreibst du dass die Libs auch diese Einstellung haben müssen.

    ich habe die ws2_32.lib allerdings so eingebunden

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

    Liegt es daran?

    Das habe ich gemacht weil ich nicht wusste wie ich sie in MSVC in den Projekteinstellungen einbinde.

    Hoffe du kannst mri weiter helfen.



  • Meine Kommentar hat sich auf LIbs bezogen die Ihrerseits wieder die CRT/MFC verwenden; das ist aber bei den Windows-LIBs nicht der Fall.

    WIE lautet denn die GENAUE Fehlermeldung?



  • Die Fehlermeldung in der Konsole lautet

    Das angegebene Programm kann nicht ausgeführt werden



  • Du hast es aber nicht zufällig als x64 compiliert und auch x86 ausgeführt?

    Was sagt denn www.dependencywalker.com ?



  • Nein ist schon als x86 compiliert und auch auf nem x86 ausgeführt worden.

    Depandancy walker werd ich hoffentlich nachher wenn der andere Rechner wieder läuft ausprobieren.



  • So hab jetzt das servicepack 3 und .NET auf dem Testrechner installeirt un jetzt läufts ohne probleme.

    Danke für dein Hilfe



  • Also ich wäre ja dafür dass "MSVC Programm läuft nicht auf anderen PCs" Threads in Zukunft kommentarlos gelöscht werden.



  • Ja... sollte man eigentlich machen... oder ich sollte *noch mehr* darüber bloggen... 😉


Anmelden zum Antworten