Ergebnis 1 bis 9 von 9

Thema: Hilfe beim debuggen einer DLL

  1. #1
    Registrierter Benutzer
    Registriert seit
    28.07.12
    Beiträge
    18

    Hilfe beim debuggen einer DLL

    Hi,

    ich bin mir unsicher, ob das in den SDK-Thread gehört und eines eigenen Bedarfs. Ehe ich jedoch den SDK-Thread zuspamme, versuche ich es daher hier.

    Nachdem ich einiges in XML und Python versucht und irgendwie mit Hilfe auch geschafft habe, wage ich mich nun daran ein paar Veränderungen an der (?) SDK durchzuführen. Für den Anfang habe ich, um das Prozedere mal durchzuspielen, damit begonnen die bei mir eingesetzte DLL (50Civs Better BAT AI) einfach nochmal neu zu kompilieren und dann im debug-Modus zu testen..

    Das Kompilieren lief fehlerlos durch. Beim Laden des Spiels habe ich jedoch einige Fehlermeldungen bekommen, bei denen ich jedoch Hilfe brauche, da ich keinerlei Programmierkenntnisse habe :

    1.
    Code:
    Assert Failed
    
    File:  CvXMLLoadUtilitySet.cpp
    Line:  1364
    Expression:  bSuccess
    Message:
    Ich weiß bereits, dass das darauf hindeutet, dass in irgendwelchen XML-Dateien ein tag (oder auch mehrere?) fehlt. Ist die betroffene Datei die, welche im Fenster "Ausgabe" in Visual Basic als letztes angezeigt wird? Gibt es einen effektiven Weg die Datei auf den fehlenden tag zu überprüfen, da einige ja sehr lang sind und man dies mit manueller Sichtkontrolle wahrscheinlich nicht hinbekommt.

    2.
    Code:
    File:  CvGlobals.cpp
    Line:  3408
    Expression:  strcmp(szType, "NONE")==0 || strcmp(szType, "")==0
    Message:  type ARTSTYLE_MIDDLE_EAST not found
    Muss ich entsprechenden artstyle nur in die "GlobalTypes.xml" eintragen, oder gibt es weitere Bezüge, die zu beachten sind?

    3.
    Ich habe zudem einige Zivilisationen modular in meinen Mod eingefügt bekomme jedoch einen Fehler, wenn ich mehr als die 50 vorgesehenen Civs im Mod habe (Beschränkungen der DLL glaueb ich). Ich würde die Zahl nun gerne etwas nach oben setzen (60 o.ä.).

    Bei den CivFanatics habe ich einen Hinweis gefunden, der auf einen Eintrag in der "CvDefines.h" verweist. ich habe einen ähnlichen Eintrag bei mir in der SDK gefunden und die dort befindliche 50 einfach auf 60 geändert. Nach dem Kompilieren kam der Fehler jedoch noch immer.

    • Hab ich was falsch gemacht.
    • Muss an anderer Stelle auch noch ein Eintrag geändert werden? Wenn ja wo?
    • Ist alles korrekt und der fehler muss doch wonders liegen?


    Code:
    /************************************************************************************************/
    /* 50 Players                                                                                   */
    /*                                                                                              */
    /************************************************************************************************/
    /* original code
    #ifdef _USRDLL
    */
    #if defined(MAX_CIV_50) && defined(_USRDLL)
    #define MAX_CIV_PLAYERS												(50)
    #endif
    #if !defined(MAX_CIV_50) && defined(_USRDLL)
    /************************************************************************************************/
    /* 50 Players END                                                                               */
    /************************************************************************************************/
    
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                      01/03/09                                jdog5000      */
    /*                                                                                              */
    /*                                                                                              */
    /************************************************************************************************/
    /* original bts code
    #define MAX_CIV_PLAYERS												(18)
    */
    // Change number of civs in game
    #define MAX_CIV_PLAYERS												(18)
    /************************************************************************************************/
    /* BETTER_BTS_AI_MOD                       END                                                  */
    /************************************************************************************************/
    /************************************************************************************************/
    /* 50 Players                                                                                   */
    /*                                                                                              */
    /************************************************************************************************/
    /* original code
    #else
    */
    #endif
    #if !defined(_USRDLL)
    /************************************************************************************************/
    /* 50 Players END                                                                               */
    /************************************************************************************************/
    Vielen Dank für Eure Hilfe!

  2. #2
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Ich kann nur was zum dritten Punkt sagen. MAX_CIV_50 ist ein Bezeichner. Es bringt nichts, dort die Zahl zu ändern. Es wird nur der Bezeichner umbenannt. Irgend wo im Code muss er gesetzt werden. Ich weis nicht wo und ob es aus einer XML geladen wird. Es ist schwer ohne Vorkenntnisse sich mit dem SDK zu beschäftigen.

    edit: Wenn du wirklich das SDK bearbeiten willst, lerne erstmal etwas über das Programmieren z.B. mit C++. Es gibt viele Tutorials im Internet.
    edit2: Könnte es sein, dass man bei MAX_CIV_PLAYERS(50) die 50 verändern muss?
    Geändert von rucivfan (03. Oktober 2012 um 16:55 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.07.12
    Beiträge
    18
    Ja die nach rechts gerückte 50 müsste es m.E. sein.

    Ich wollte eigentlich nichts selbst umbauen, sondern nur ein paar Modifikationen einbauen, die bereits fertig sind. Von daher hoffe ich, dass es dafür reicht.
    Geändert von Alrik2002 (03. Oktober 2012 um 18:09 Uhr)

  4. #4
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    Der erste Fehler befindet sich bereits in der BTS Datei. Firaxis war einfach schlampig.
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.07.12
    Beiträge
    18
    Wie? Nummer 1 ist nur ein Fehler? Bei mir kam die Meldung nämlich ziemlich oft (vielleicht 20 mal?).

    Kann man den beheben? Falls ja wie?

    Ach ja. 3. hat sich erledigt.

  6. #6
    Waddehaddedudeda Avatar von Cybah
    Registriert seit
    01.09.06
    Beiträge
    30.455
    K.a., stört jedenfalls nicht.

    Bezüglich Fehler2: Warum steht da überhaupt ein konkreter Style drin? Hast du den eingetragen?
    Pucc's Lets Plays BASE 6.0: #1 #2 #3 #4 #5

    Download von BASE 6.4 [D]: HIER (klick mich!) (Stand: 08.07.2022)

  7. #7
    Registrierter Benutzer
    Registriert seit
    28.07.12
    Beiträge
    18
    Nein. In den Source-Files habe ich nochts geändert. Da steht der Style auch nicht drin. Die Zeile die gemeldet wurde ist im folgenden Code rot eingefärbt:

    Code:
    //
    // Global Types Hash Map
    //
    
    int CvGlobals::getTypesEnum(const char* szType) const
    {
    	FAssertMsg(szType, "null type string");
    	TypesMap::const_iterator it = m_typesMap.find(szType);
    	if (it!=m_typesMap.end())
    	{
    		return it->second;
    	}
    
    	FAssertMsg(strcmp(szType, "NONE")==0 || strcmp(szType, "")==0, CvString::format("type %s not found", szType).c_str());
    	return -1;
    Wie gesagt habe ich von C++ keine Ahnung aber falls ich es richtig sehe ist eine der Bedingungen für die Fehlermeldungen erfüllt ("NONE" oder ""), weswegen der Text angezeigt wird.

    Ich vermute, dass das an einer hinzugefügten Civ liegt. Bei dieser steht in der CivilizationInfos

    Code:
    <ArtStyleType>ARTSTYLE_MEDITERRANEAN</ArtStyleType>
    Dieser Artstyle ist jedoch in der GlobalTypes.xml noch nicht eingetragen. Dies an sich wäre ja kein Problem, aber irgendwo muss dieser Artstyle, also die Grafik(en) an sich ja auch sein oder habe ich da einen Denkfehler?

  8. #8
    Civ4 BASE Coder Avatar von rucivfan
    Registriert seit
    10.07.11
    Ort
    Antarktika
    Beiträge
    19.017
    Das ist dann aber kein SDK-Problem, sondern ein XML-Definitions-Problem. Das kann nur gelöst werden, wenn in den richtigen XML-Dateien, die richtigen Einträge erfolgen. Die Fehlermeldung weist nur darauf hin. Sowas wird nicht im SDK definiert.

    Dieser Artstyle ist jedoch in der GlobalTypes.xml noch nicht eingetragen. Dies an sich wäre ja kein Problem, aber irgendwo muss dieser Artstyle, also die Grafik(en) an sich ja auch sein oder habe ich da einen Denkfehler?
    Dann trag ihn dort ein. Es gibt noch mehr XML, wo man für die Grafik was definieren kann. Die einfachste Lösung wär [vielleicht] das Entfernen bzw. das Auskommentieren des Eintrages bei der Civ.
    Geändert von rucivfan (07. Oktober 2012 um 00:35 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    28.07.12
    Beiträge
    18
    Ok. Habs probiert einzutragen mit dem Effekt, dass die Städte nicht mehr angezeigt wurden. Hab den Artstyle einfach in einen anderen schon vorhandenen geändert. Jetzt gehts. Danke.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •