Header "auslagern"

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Header "auslagern"

      Hi^^
      Ich habe mal wieder eine Frage zur Code Auslagerung xD
      Kennt ihr Möglichkeiten Makros in eine Header Datei zu packen und diese separat zu halten?
      Also nicht in der Exe sondern extra, so damit man das ändern kann.
      Es sollte Funktionieren, da die Flyff Server Files dieses System ja auch benutzen...

      Ich hoffe ihr seit wieder so Kreativ wie beim letzen mal^^
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Also Includen kann ich es nicht, da die Header Datei sonst in der EXE währe.
      Vielleicht hilft es ja wenn ich mal den Ordner "Poste":

      ..\Mein Projekt\Test.exe
      ..\Mein Projekt\Test.h <- Hier will ich meine Makros reinspeichern, so das ich diese nach Lust und Laune ändern kann.
    • hab kein flyff und weiß nicht genau was du mit makros meinst aber wenn ich iwas editierebn möchte nachdem das programm kompiliert wurde benutze ich einfach tinyXml und lese xml dateien aus die dann die entsprechenden veränderungen liefern (auflösung, vollbild aber auch gespeicherte spiele und das auslesen der statistiken von waffen.
    • Danke ich schaue mal nach xml :-)

      Das was ich Makros nenne sind in wirklichkeit Symbolische Konstanten (Ja ich lass den Streber raushängen xD)
      Diese werden mit #define Definiert. Das sind nichts anderes als Variablen denen man keinen Typ zu weisen muss.
      Sie erhöhen nur die Lesbarkeit des Codes. Es gibt zwar wirkliche Makros in C++, aber die benutze ich nicht^^
      Deshalb habe ich auch keine Ahnung wie die Funken^^
    • [COLOR="DeepSkyBlue"]xD ok^^
      Ich will meine "Makros" (#define) in eine Header Datei schreiben. Diese soll aber für jeder man zugänglich sein.
      Also kann ich sie nicht auf die herkömmliche Art einbinden sondern irgendwie anders^^
      Ich habe mir schon überlegt die Debug Exe zu nehmen, aber da habe ich ja dann abnorme Speed Verluste...
      Ich habe mal einen Screens angehängt, man sagt ja "Bilder sagen mehr als 1000 Worte" ;-)

      PS: TwiLight hat Recht.[/COLOR]

    • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]hmm da define aber ne präprozessoranweisung ist, wirste somit auf den verzeichten müssen, denn der compiler erfährt nie was vom präprozessor.
      Das is wie ein beanmter der nix ausser seinem büro kennt und papiere von unbekannten kollegen durchgeht.
      Korrigiert mich sollte ich bei diesem ding falsch liegen.

      Jedenfalls, auf die hilfe des präprozessors kannste da nich abun.
      Ich schätze dass offi files drauf programmiert wurden die dinge zu lesen und so halt finden was sie suchen, bzw auch lua spielt in vielen dingen eine roll.
      (lua kann glaub in jeder datei stehn, also von der endung her oder?
      KOmmt ja nur aufn code an meine ich.)[/SIZE][/COLOR][/FONT]
    • [COLOR="DeepSkyBlue"]
      (lua kann glaub in jeder datei stehn, also von der endung her oder?
      KOmmt ja nur aufn code an meine ich.)

      Jap, das stimmt. Habe aber keine Funktion für so etwas gefunden^^
      Das is wie ein beanmter der nix ausser seinem büro kennt und papiere von unbekannten kollegen durchgeht.
      :D
      compiler erfährt nie was vom präprozessor

      Das kann man sich ja vielleicht zu nutzen machen.

      Ich hätte da mal ne Code Idee:

      Quellcode

      1. [Achtung Pseudo Code]
      2. Alle #defines in den Source Code schreiben. Und zwar so:[code]
      3. int wert[Define_Anzahl];
      4. int Increment = 0;
      5. #define Max_Server Increment
      6. ...
      Include File öffnen;
      Erster #define NAME einlesen,
      Intern abgleichen.
      Wenn der gefunden wurde den #define WERT einlesen und in wert[Increment] setzen.
      Dann ++Increment und zur nächsten Anweisung.
      Jetzt kann der Code mit den #defines ausgeführt werden.[/CODE]
      [/COLOR]

      [COLOR="DeepSkyBlue"]Ich weiß nicht das beste aber wenn jemand Ideen zur Verbesserung hat, her damit :D[/COLOR]
    • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]Hmm muss dein System morgen mal neu durchlesen^^
      Vll wirds ja in dem Sinne was, wer weiß.
      Und die Endung ist realtiv egal, meine MapEngine die ich in XNA code, benutzt zB .amd Endung für Maps und .ats für tilesets
      Und gelesen kanns trotzdem werden, da ist kein problem dabei.[/SIZE][/COLOR][/FONT]
    • was ich noch nicht so ganz verstanden hab ist wieso du max_server mit #define zu 100 bringen möchtest und dafür nicht einfach einen integer benutzt. dann könntest du das ganze auch mit xml machen. einfach eine xml datei:

      zb
      <values>
      <max_server>100</max_server>
      </values>

      und das dann in einer funktion in der klasse von der benutzung von max_server auslesen lassen und dann ist max_server in deinem programm auch 100 und wenn du den wert in der xml datei veränderst verändert er sich auch in deinem programm. wenn keine xml datei da ist kannste noch ne if schleife einbauen und sonst immer auf 100 setzen oder so.
    • Habe jetzt den Code ausgearbeitet. #define kann man dabei nicht benutzen! Ich habe die ganz normalen Typen benutzt.

      C-Quellcode

      1. #include <iostream>
      2. #include <string>
      3. /**** Function: Important Defines Script Date: 1.7.2010 Time: 19:22:48 ****/
      4. #define Define_Pfad ".\\Include\\LoginSystem.inc"
      5. /**** Name: LoginSystemInc Typ: Struct Function: All Defines From Include File Script Date: 1.7.2010 Time: 21:37:12 ****/
      6. struct LoginSystemInc
      7. {
      8. int Max_Server;
      9. } LoginSystemInc;
      10. /**** Name: Define_Read() Typ: Integer Function: Reads the Defines From Include File Script Date: 1.7.2010 Time: 21:42:53 ****/
      11. extern int Define_Read()
      12. {
      13. std::ifstream Define_in;
      14. Define_in.open(Define_Pfad,std::ios_base::in);
      15. std::string Command = "";
      16. std::string Name = "";
      17. std::string Wert = "";
      18. Define_in >> Command >> Name >> Wert;
      19. if (Name == "Max_Server")
      20. {
      21. LoginSystemInc.Max_Server = 0;
      22. if(LoginSystemInc.Max_Server = atoi(Wert.c_str()))
      23. {
      24. std::cout << "[Include] " << Command << " " << Name << " " << LoginSystemInc.Max_Server << std::endl;
      25. }
      26. else
      27. {
      28. std::cout << "[FAIL] Max_Server : Wrong Typ! (Need Integer)" << std::endl; system("PAUSE"); exit(0);
      29. }
      30. }
      31. return 0;
      32. }
      Alles anzeigen
      Die Schleife muss von euch selbst eingebaut werden :P

      Edit:
      Noch das File:

      Quellcode

      1. #define Max_Server 123
    • Chaosduckman;155124 schrieb:

      Habe jetzt den Code ausgearbeitet. #define kann man dabei nicht benutzen! Ich habe die ganz normalen Typen benutzt.

      C-Quellcode

      1. #include <iostream>
      2. #include <string>
      3. /**** Function: Important Defines Script Date: 1.7.2010 Time: 19:22:48 ****/
      4. #define Define_Pfad ".\\Include\\LoginSystem.inc"
      5. /**** Name: LoginSystemInc Typ: Struct Function: All Defines From Include File Script Date: 1.7.2010 Time: 21:37:12 ****/
      6. struct LoginSystemInc
      7. {
      8. int Max_Server;
      9. } LoginSystemInc;
      10. /**** Name: Define_Read() Typ: Integer Function: Reads the Defines From Include File Script Date: 1.7.2010 Time: 21:42:53 ****/
      11. extern int Define_Read()
      12. {
      13. std::ifstream Define_in;
      14. Define_in.open(Define_Pfad,std::ios_base::in);
      15. std::string Command = "";
      16. std::string Name = "";
      17. std::string Wert = "";
      18. Define_in >> Command >> Name >> Wert;
      19. if (Name == "Max_Server")
      20. {
      21. LoginSystemInc.Max_Server = 0;
      22. if(LoginSystemInc.Max_Server = atoi(Wert.c_str()))
      23. {
      24. std::cout << "[Include] " << Command << " " << Name << " " << LoginSystemInc.Max_Server << std::endl;
      25. }
      26. else
      27. {
      28. std::cout << "[FAIL] Max_Server : Wrong Typ! (Need Integer)" << std::endl; system("PAUSE"); exit(0);
      29. }
      30. }
      31. return 0;
      32. }
      Alles anzeigen
      Die Schleife muss von euch selbst eingebaut werden :P

      Edit:
      Noch das File:

      Quellcode

      1. #define Max_Server 123


      std::cout << "[FAIL] Max_Server : Wrong Typ! (Need Integer)" << std::endl; system("PAUSE"); exit(0);
      Wenn Englisch, dann richtig ^^

      Zu dem Define..
      Bei es einfach in die StdAfx.h ein (Denk mal, du benutzt eine), dann benutzt du

      Quellcode

      1. #include "defineXXX.h"
      Nun solltest du natürlich den IncludePath der Datei richtig angeben (Am besten nicht im Hauptsource Verzeichnis, sondern Extern, z.B. Includes), und die Datei dort erstellen.

      Nach dem compilen sollte die Datei geladen werden, und variable Ergebnisse genauso o:

      Wenn das nicht hinhaut, lasse solche Dateien über eine separate cpp-Datei laden, in etwa so:

      Quellcode

      1. #include "stdafx.h"
      2. void LoadDefines()
      3. {
      4. char* lpszDefines[] = {
      5. "defineXXX.h",
      6. "defineYYY.h"
      7. };
      8. int n, i;
      9. n = sizeof(lpszDefines) / sizeof(lpszDefines[0]);
      10. for( i=0; i<n; ++i )
      11. {
      12. CScript script;
      13. if( script.Load( lpszDefines[i] ) == TRUE )
      14. script.PreScan();
      15. }
      16. }
      Alles anzeigen
    • TwiLight schrieb:

      Nach dem compilen sollte die Datei geladen werden

      Ja und da wären wir beim springenden Punkt.
      Die Datei wird nur beim Compilen eingesen.
      Ich will aber, das sie bei jedem Start gelesen wird^^

      Aber ich weiß nicht ob deine 2. Möglichkeit vielleicht klappt.
      Das müsste ich schnell versuchen^^

      Achja: Hier die Finale Funktion:

      C-Quellcode

      1. #include <iostream>
      2. #include <fstream>
      3. #include <string>
      4. #include <time.h>
      5. #define Define_Pfad ".\\Include\\LoginSystem.inc"
      6. #define Define_Loop 200
      7. struct LoginSystemInc
      8. {
      9. int Max_Server;
      10. std::string No_Function_NAME[Define_Loop];
      11. std::string No_Function_WERT[Define_Loop];
      12. } LoginSystemInc;
      13. extern int Define_Read()
      14. {
      15. system("title 1. Login System (Include)");
      16. system("color 0F");
      17. int Define_Increment, loop;
      18. time_t Def_Sta_Tim = 0, Def_End_Tim = 0;
      19. std::ifstream Define_in;
      20. Define_in.open(Define_Pfad,std::ios_base::in);
      21. if (!Define_in)
      22. {
      23. std::cout << "[FAIL] : " << Define_Pfad << " Can Not Open!" << std::endl; system("PAUSE"); exit(0);
      24. }
      25. std::string Command = "";
      26. std::string Name = "";
      27. std::string Wert = "";
      28. Def_Sta_Tim = time(NULL);
      29. for (loop = 1,Define_Increment = 0; loop < Define_Loop; ++loop,++Define_Increment)
      30. {
      31. Command = "";
      32. Name = "";
      33. Wert = "";
      34. Define_in >> Command >> Name >> Wert;
      35. if (Command.find("//",0) <= 1) continue;
      36. if (Wert == "#define") break;
      37. if (Name == "#define") break;
      38. if (Name == "Max_Server")
      39. {
      40. LoginSystemInc.Max_Server = 0;
      41. if(LoginSystemInc.Max_Server = atoi(Wert.c_str()))
      42. {
      43. std::cout << "[Include] " << Command << " " << Name << " " << LoginSystemInc.Max_Server << std::endl;
      44. continue;
      45. }
      46. else
      47. {
      48. std::cout << "[FAIL] #define Max_Server : Wrong Type! (Need Integer)" << std::endl; system("PAUSE"); exit(0);
      49. }
      50. }
      51. if (Name == LoginSystemInc.No_Function_NAME[--loop])
      52. {
      53. if (Wert == LoginSystemInc.No_Function_WERT[loop]) break;
      54. } else ++loop;
      55. LoginSystemInc.No_Function_NAME[loop] = Name;
      56. LoginSystemInc.No_Function_WERT[loop] = Wert;
      57. std::cout << "[Include] [NO FUNCTION] " << Command << " " << LoginSystemInc.No_Function_NAME[loop] << " " << LoginSystemInc.No_Function_WERT[loop] << std::endl;
      58. }
      59. Def_End_Tim = time(NULL);
      60. Define_in.close();
      61. system("CLS");
      62. std::cout << "[SUCCESS] " << Define_Increment << " Included System #define(s) [" << Def_End_Tim - Def_Sta_Tim << " Second(s)]" << std::endl;
      63. system("title 1. Login System (Start Up)");
      64. delete Define_in,
      65. Def_End_Tim,
      66. Def_Sta_Tim;
      67. return 0;
      68. }
      Alles anzeigen
      Edit:
      Also bei deiner 2. Funktion bekomme ich einen error beim Ausgeben.
      Also Debuger angeschmissen: Der Variable wurde der super Wert "I" (73) zugewiesen.
      Ich habe aber in meiner Datei #define Max_Server 100 stehen...

      Naja trozdem danke für deine Hilfe :D

      Aber ich benutze lieber meine eigene Funktion^^
      Auch wenn sie bestimmt langsamer/schlechter ist als andere xD