Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Chatserver startet nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
09.10.2003, 22:33 Uhr
Philipp



Ja, ich habe wieder mal neue Probleme mit meinem ChatServer, nur dieses mal ist die Sache etwas verworrener.

Also, der ChatServer ist mittlerweile Version 0.8 und sollte auch relativ ausgereift sein(dachte ich jedenfalls), also gebe ich den heute nem Freund zum testen, und was sagt der mir : Das Ding startet bei ihm nicht. Heute abend hab ich nem anderen Freund dann nochmal das prog gegeben, bei dem funzt er auch nicht.

Freund1 hat WinXP ohne SP, Freund 2 hat Win2000 ohne SP...
Ich habe an meinem 2600er Win2000 SP4(Programm funktionert), und an meinem 500er Win2000 SP3(Programm funktioniert ebenfalls).

Das lustige ist : Bei mir klappt der EINWANDFREI, es gibt so gut wie garkeine Probleme! Jetzt mal zur Problembeschreibung: Wie gesagt bei mir gibt es das Problem nicht, dass macht hauptsächlich auch die Schwierigkeit aus! Wenn also einer dieser beiden Freunde meine ChatServer.exe startet, dann passiert bei ihm "garnichts", soll heißen sie sehen kein Fenster. Das hat mich schonmal sehr verwundert, habe dann das Log-Verhalten des ChatServers etwas angepasst, sodass ich sehe wie weit er kommt, und ich muss sagen, ich bin wirklich enttäuscht, denn ChatServer stürzt schon in OnInitDlg ab! Damit ihr das mal richtig nachverfolgen könnt mal einige Ausschnitte aus dem beim Start aufgerufenen Code sowie den LogFiles(anmerkung : Die Klasse ChatCore erbt public von CAsyncSocket).

1) CChatServerDlg::OnInitDlg()

C++:
//Initialisieren des Netzwerks per AfxSocketInit(=erfolgreich), danach erstellen der Log Files(=ebenfalls erfolgreich)

ChatMessageLog<<"*** ChatMessageLog of ChatServer - copyright (c) 2003 by PhilippOettershagen ***"<<endl;
    ChatMessageLog<<"*** See readme.txt for further informations"<<endl;
    ChatMessageLog<<"*** Current Time: "<<GetTime(false);
    ChatMessageLog<<"*** In this LogFile, ChatServer stores all the messages sent by its clients!"<<endl<<endl;

    ApplicationStateLog<<"*** ApplicationStateLog of ChatServer - copyright (c) 2003 by PhilippOettershagen ***"<<endl;
    ApplicationStateLog<<"*** See readme.txt for further informations"<<endl;
    ApplicationStateLog<<"*** Current Time: "<<GetTime(false);
    ApplicationStateLog<<"*** In this LogFile, ChatServer stores the App's State and special commands sent!"<<endl<<endl;
    
    ApplicationStateLog<<GetTime()<<"Initiating Application..."<<endl;

    ApplicationStateExLog<<"*** ApplicationStateExLog of ChatServer - copyright (c) 2003 by PhilippOettershagen ***"<<endl;
    ApplicationStateExLog<<"*** See readme.txt for further informations"<<endl;
    ApplicationStateExLog<<"*** Current Time: "<<GetTime(false);
    ApplicationStateExLog<<"*** In this LogFile, ChatServer stores extended App's State, used to debug the app!"<<endl<<endl;
    
    ApplicationStateExLog<<GetTime()<<"Initiating Application..."<<endl;

    //CCore Creation
            ApplicationStateExLog<<GetTime()<<"DEBUG_OnInitDialog_1"<<endl;
    
    ApplicationStateExLog<<GetTime()<<"Creating ChatCore...";
    if(CCore.Create()!=CCORE_SUCCESS)//Create ChatCore
        AfxMessageBox("Error creating ChatCore!");
    ApplicationStateExLog<<"Done"<<endl;
            
            ApplicationStateExLog<<GetTime()<<"DEBUG_OnInitDialog_2"<<endl;
    
    ApplicationStateExLog<<GetTime()<<"Setting LogFiles for ChatCore...";
    CCore.SetLogFiles(&ChatMessageLog,&ApplicationStateLog,&ApplicationStateExLog);
    ApplicationStateExLog<<"Done"<<endl;

    ApplicationStateExLog<<GetTime()<<"DEBUG_OnInitDialog_3"<<endl;
    
            ApplicationStateExLog<<GetTime()<<"Retrieving Computer's IPAdresses...";
    CCore.GetLocalIPs();    //GetPCs IPAddresses
    ApplicationStateExLog<<"Done"<<endl;
            
            ApplicationStateExLog<<GetTime()<<"DEBUG_OnInitDialog_4"<<endl;
    ApplicationStateLog<<"Done"<<endl;



ChatCore::Create

C++:
iPort=0;
iMaxClients=0;
iConnectedClients=0;
    
strIPAddress="0.0.0.0";
strPassword="";
strChatTopic="";

bInit=false;

return CCORE_SUCCESS;



Und die ApplicationStateEx.log

Code:
*** ApplicationStateExLog of ChatServer - copyright (c) 2003 by PhilippOettershagen ***
*** See readme.txt for further informations
*** Current Time: Thu Oct 09 20:32:24 2003
*** In this LogFile, ChatServer stores extended App's State, used to debug the app!
                              
20:32:24    Initiating Application...
20:32:24    DEBUG_OnInitDialog_1



So... das wären die meiner Meinung nach wichtigen Teile...
Fehlerverhalten ist halt folgendes : Er gibt noch DEBUG_OnInitDialog1 aus, d.h. Logfiles sind initialisiert, Netzwerk auch. Doch dann wird CCore.Create() aufgerufen, und das Ergebnis ist, dass kein Log-Eintrag mehr kommt, die Anwendung sich aber beendet. Habe versucht ein wenig daran rumzuspielen, und habe mal die Funktion ChatCore::SetLogFiles als erstes laden lassen, um danach CCore.Create() aufzurufen, aber das hat auch nichts gebracht.

ChatCore::SetLogfiles(ofstream *NewChatMessageLog, ofstream *NewApplicationStateLog, ofstream *NewApplicationStateExLog)

C++:
if(NewChatMessageLog==NULL || NewApplicationStateLog==NULL || NewApplicationStateExLog==NULL)
        return CCORE_ERROR;
    
    ChatMessageLog=NewChatMessageLog;
    ApplicationStateLog=NewApplicationStateLog;
    ApplicationStateExLog=NewApplicationStateExLog;
    
    return CCORE_SUCCESS;



Resultat war das gleiche, DEBUG_OnInitDialog_1 wird noch ausgegeben, der Rest nix. Irgendwas stimmt also mit CCore nicht, nur was???Habe als erstes versucht, in CCore::Create() CAsyncSocket::Create() aufzurufen um den CAsyncSocket erstmal zu initialisieren, aber auch das hat nichts gebracht!

Wie schonmal gesagt, ich hab das alles nicht bei mir testen können, denn bei mir läuft das Prog, halt nur bei meinen 2 Freunden net. Hab denen die Release Version gegeben mit Einstellung "Größe minimieren".

Interessant ist, dass das Prog bei dem einen Freund läuft, wenn er den Source(hab ich ihm gegeben) in seinem VC++ kompiliert und ausführt, also aus dem Studio raus. Wenn er allerdings kompiliert und dann die kompilierte+gelinkte Exe ausführen will, stürzt das Prog wieder ab

Helft mir plz, ich weiß echt nicht was das für ein Fehler sein kann!

THX
Philipp

Dieser Post wurde am 09.10.2003 um 22:42 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.10.2003, 11:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


schreib mal


C++:
ApplicationStateExLog<<GetTime()<<"Creating ChatCore..." [b]<<flush[/b];



dann sieht man genau ob es wirklich an der Funktion liegt!

Und ruft der die Create-Funktion wirklich auf? nicht ausversehen die der Basisklasse?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.10.2003, 15:00 Uhr
Philipp



also das Anfügen von flush bringt irgendwie garnix, er gibt noch nicht mal das "Creating ChatCore" aus sondern geht wieder nur bis "DEBUG_OnInitDialog_1"...

Ist das jetzt gut oder schlecht?

Ja, also wenn ich das programm bei mir debugge dann öffnet der wirklich ChatCore::Create, und nicht CAsyncSocket::Create()!

Irgendwer ne Idee? Sowas schonmal jemandem passiert? Soll ich vielleicht den Code von davor noch posten? Will einer den Source mal haben?

Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.10.2003, 16:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


poste mal die komplette Create-Methode + Definition in der header datei!

Was vielleicht noch wichtig sein kann: hast du deinem bekannten, also da wo es abstürzt eine Debug oder Release-Version gegeben? Und hast du die MFC-Lib statisch oder dynamisch gelinkt?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.10.2003, 17:21 Uhr
Philipp



Also 1)


C++:
class ChatCore :    public CAsyncSocket
{
public:            //Chatcore einrichten
    ChatCore();
    ~ChatCore();
    int Create();
        //...




C++:
int ChatCore::Create()
{
    iPort=0;
    iMaxClients=0;
    iConnectedClients=0;
    
    strIPAddress="0.0.0.0";
    strPassword="";
    strChatTopic="";

    bInit=false;
    
    return CCORE_SUCCESS;    
}



Zu 2) War eine Release Version, die bei mir hier optimal läuft. Release kompiliert mit Einstellung "Größe minimieren" in VC++ 6 mit SP5!

Zu 3) Ich weiß noch nicht mal was der Unterschied ist, kannst du/kann jemand mir das mal erklären? Und wo finde ich Angaben darüber wie ich die MFC Libs gelinkt habe?

P.S. : Könnte jetzt 2 Tage dauern bis ich wieder poste, habe erstmal 2 tage lang kein Internet/Computer!

THX
Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.10.2003, 19:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wahrscheinlich ruft die Release-Version nicht deine Klasse auf sondern die der Basisklasse! Probier mal aus wenn du die Create-Funktion mit


C++:
virtual int Create();



im Header definierst.

zu 3:
dynamisch linken heißt das du die MFC-Bibliotheken auf dem Zielrechner benötigst (also msvcrt.dll usw)
beim statischen linken werden die benötigten Teile der MFC-Library in dein Programm integriert, d.h man braucht auf den zielrechnern diese librarys nicht!

Ob Statisch oder Dynamisch eingestellt ist, kannst du direkt auf der ersten Seite der Projekteinstellungen nachschauen!


Code:
"Use of MFC" = "dynamic" / "static"


Wie das genau aussieht, ist je nach Version unterschiedlich!
Das statische Linken ist nur ab Professional-Version des VS möglich
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.10.2003, 20:45 Uhr
Philipp




Zitat:

wahrscheinlich ruft die Release-Version nicht deine Klasse auf sondern die der Basisklasse! Probier mal aus wenn du die Create-Funktion mit

C++:
virtual int Create();


im Header definierst.


Ich hab zwar mal gelernt, dass wenn die Funktion der Basisklasse virtual ist, die gleichnamige Funktion der von dieser Basisklasse abgeleiteten Klasse auch direkt virtual ist, aber ich probiers trotzdem mal

Wegen dem linken : Das war auf dynamisch gestellt!

War jetzt gestern auf ner LAN, da hab ich es auf nem anderen Computer ausprobieren dürfen, und da hat es wieder einwandfrei gefunzt(WinXP hatte der). Hab da auch mal zwischen static/dynamic Linken umgeschaltet, aber hatte da keine Auswirkungen. Ich werde den leuten bei denen das net geht aber in Zukunft mal ne Version mit statisch gelinkter MFC geben!

Kann aber noch was dauern, weil ich das wie gesagt nicht bei mir selber, sondern bei anderen testen muss!

THX
Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.10.2003, 17:27 Uhr
Philipp



Juchhu es läuft

Allerdings mit starken "Einschränkungen" in Form der Dateigröße:

Schritt 1) "int Create();" in "virutal int Create();" geändert, keine Veränderung(Crash).

Schritt 2) Optimierung "Größe minimieren" -> "Standard", keine Veränderungen

Schritt 3) Dynamisches MFC Linken -> Statisches MFC linken , Programm funktioniert auch bei anderen Leuten einwandfrei!

Das ist ja schonmal toll, ich hab im Moment also ne Version mit optimierung (Größe minimieren) und statisch gelinkter MFC, nur ist die .exe unkomprimiert jetzt ~300 !!! kb groß! Und das ist eindeutig zu viel für so nen kleinen ChatServer!

Kann ich nicht irgendwie die größe noch verringern? Brauche z.B. ja nicht die komplette MFC, kann ich da nicht seperat einstellen welche DLL/Bibliothek ich mitlinken will??

THX
Philipp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.10.2003, 18:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, wenn du schon größe optimieren aktiviert hast wirst du nicht um die 300kb rumkommen! Wenn VC die komplette MFC-Library linken würde wäre deine exe über 15mb groß!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.10.2003, 22:06 Uhr
Philipp



Hui hui, hab eben mit nem Freund geredet, der hat sich eins meiner kleinen älteren Progs angeschaut, aber das hat bei ihm mit den gleichen Symptomen wie bei ChatServer auch net geklappt!

Hab direkt das gleiche versucht, also Einstellungen auf statisches MFC linken, und es funktionierte auch bei ihm!

Jetzt ist aber auch die exe ~170kb groß! Da ich jetzt so schlechte erfahrungen mit dem dynamischen linken gemacht hab, wie macht ihr das denn immer? Linkt ihr auch immer statisch, und nehmt so große exe dateien in kauf? Weil irgendwie seh ich nur selten solch große exe dateien bei hobby-programmierern!

[edit] Nagut habe gerade noch was probiert:

ExePacken( mit UPX)

Crypter : 170kb -> 75kb
ChatServer : 300kb -> 120kb

Sieht ja schonmal besser aus, macht ihr das so?

Philipp

Dieser Post wurde am 13.10.2003 um 22:11 Uhr von Philipp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: