int in char* konvertieren?

TeCe

Erfahrenes Mitglied
Hallö...bin noch immer dabei mich ein wenig in C++ zurecht zu finden...
Anfangs hielt ich´s sogar noch für selbsterklärend, weil ich in c und php schon einige Erfahrungen gesammelt habe. War wohl nix :)

Also ich hab mir zum debuggen meines selbst zusammengepfuschten services(der auch schon gut läuft) eine eigene Logfunktion geschrieben
PHP:
int WriteToLog(char* str)
{
	FILE* log;
	log = fopen(LOGFILE, "a");
	if (log == NULL)	return -1;
	fprintf(log, "%s\n", str);
	fclose(log);
	return 0;
}

Jedoch kann ich mir damit nur eigene Texte ausgeben.
Wie schaffe ich es denn nun den Inhalt von Bsp.: WSAGetLastError()(Winsock2.h) schreiben zu lassen?
Ich bekomm immer nur folgendes Vorgeworfen
PHP:
error C2664: 'WriteToLog' : Konvertierung des Parameters 1 von 'int (__stdcall *)(void)' in 'char *' nicht möglich
...kann damit jedoch herzlich wenig anfangen :(

danke schonmal
 
Du kannst Dein Wert beispielsweise mit sprintf in eine Zeichenkette umwandeln lassen.

So beispielsweise:
sprintf(mybuffer, "%d", myNumber);
 
Auch sehr elegant:
Code:
int WriteToLog(char* format, ...)
{
    FILE* log;
    va_list args;
    
    log = fopen(LOGFILE, "a");
    if (log == NULL)    return -1;
    
    va_start(args, format);
    vfsprintf(log, format, args);
    va_end(args);

    fclose(log);
    return 0;
}
(Ungetestet!)

Aufrufmöglichkeiten:

WriteToLog("Foo\n");
WriteToLog("Foo %s\n", szBar);
WriteToLog("Foo %s %d\n", szBar, iNum);
usw.

Also praktisch wie ein Aufruf der *printf-Funktionen.
 
goela::
Selbst bei sprintf() meckert er, wegen der konvertierung von 'int (__stdcall *)(void)' in 'char *' :-(

PHP:
nBytes = recv(clientSocket, inMessage, sizeof(inMessage), 0);
if (nBytes == SOCKET_ERROR) {
	char* ToLog = sprintf(WSAGetLastError, "%d");
	WriteToLog(ToLog);
}

reima::
Und bei deiner Version, die mir vom Prinzip her auch sehr gut gefällt, kommt er mit va_start(), vfsprint() etc. nicht klar...wahrscheinlich wegen einer nicht includeten headerDatei...bin halt, wie bereits erwähnt, nicht sehr mit dem Umgang der tollen Sprache gewandt...

[edit]
Hab es doch noch auf meine stümperhafte Weise geschafft...hab einfach die Funktion zum schreiben kopiert, sie umbenannt und gesagt, dass er statt str einfach WSAGetLastError() schreiben soll.
Und siehe da...er schreibt ihn auch rein :)
Aber woher weiss ich denn nun, welcher Fehler vorliegt? in der winsock2.h steht nix von einem Error mit einer so hohen Nummer...

Was mach ich denn jetzt wieder falsch!?
[/edit]
 
Zuletzt bearbeitet:
gut...lassen wir das...ich hab auch diese, im Nachhinein, lächerliche Hürde überwunden.
Aber jetzt, wo ich weiss worans liegt kommt ein wirklich grosses Problem :-|
Ich habe mir einen Service, den man per Winsock ansprechen kann, zusammengewürfelt(also hier und da was genommen, nachvollzogen und dann kombiniert). Die client-server Variante hab ich schon fertig und funktioniert auch...jedoch nur, wenn der server nicht als service läuft.Die Service Version unterscheidet sich eigentlich nur darin, dass die Abfrage in einer While-Schleife(service aktiv) befindet. Dank eurer Denkanstösse bin ich nun also soweit gekommen herauszufinden, dass das Problem am Befehl accept liegt(clientSocket ist -1)!
PHP:
int serverSocket = 4711;
int clientSocket = accept(serverSocket, 0, 0);
int startup(unsigned short port) {
	WSAData wsaData;
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	int mySocket = socket(AF_INET, SOCK_STREAM, 0);
	struct sockaddr_in server;
	server.sin_family = AF_INET;
	server.sin_port = htons(port);
	server.sin_addr.s_addr = INADDR_ANY;
	bind(mySocket, (sockaddr*)&server, sizeof(server));
	listen(mySocket, 1);
	return 0;
}

soh...wenn es dann in´s MainLoop geht wird einmal startup aufgerufen...wenn nun etwas an unseren Server gesendet wird soll er dem entsprechend reagieren:

PHP:
if (recv(clientSocket, clientMessage, sizeof(clientMessage), 0) != SOCKET_ERROR) { 
	Beep(1000, 1000);//JUHU, eine Nachricht ist angekommen
}

Kann doch nich so schwer sein!?

Oder mal anders...Ist mein obiger Weg korrekt um einen Socket zu öffnen/überwachen?
 
Hier ist eine Liste der Konstanten sowie Nummern mit entsprechendem Fehler!
Die kannst oder musst Du in Deinem Programm umsetzen, wenn Du eine Fehlermeldung im Klartext ausgeben willst!
 
Zurück