Residents file auslesen.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Residents file auslesen.

Beitrag von _JON_ »

Hallo Leute,

Habe mal eine Frage bezüglich der Resident files die man mit PB erstellen kann,
welche Konstanten und Strukturen im binarer Form speichern.

Ist dass eine Einbahnstraße oder kann man den Inhalt auch wieder auslesen,
also wieder eine *.pb Datei draus machen?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Residents file auslesen.

Beitrag von xXRobo_CubeXx »

Das is leider nicht möglich!

Hast du n Resident file erstellt und den Quell Code gelöscht ? Versuchs mal mit einen Rettungsprogramm!

Oder habe ich deine Frage falsch verstanden ? Bin schon sehr müde muss erstma pennen gehn...
Bild
Version 5.41 LTS :)
C h r i s :)
Beiträge: 56
Registriert: 12.11.2015 17:41

Re: Residents file auslesen.

Beitrag von C h r i s :) »

@xXRCXx :mrgreen: :mrgreen: :mrgreen: :allright:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Residents file auslesen.

Beitrag von NicTheQuick »

Natürlich geht das. Purebasic muss es selbst doch auch können. Ich glaube im englischen Forum hat das sogar mal jemand gemacht, ich finde es nur gerade nicht. Vielleicht findest du es ja selbst.

@xXRobo_CubeXx:
Wenn du keine Lösung kennst und lieber falsch behauptest es gehe nicht, solltest du vielleicht lieber nichts sagen? Oder wolltest du nur dein "tolles" GIF posten?
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Residents file auslesen.

Beitrag von xXRobo_CubeXx »

Tut mir leid NicTheQuick :cry: ich meine irgendwo gelesen zu haben das es nicht möglich ist weil es kompiliert sei oder so. :roll: Dan hab ich das wohl mit etwas anderes verwechselt. :oops: war keine Absicht! War das Userlib die man nicht dekompilieren kann ? :? Tut mir leid NicTheQuick ich habe das schein bar verwechselt. Sei mir bitte nich böse. Sorry nochmal. :( :cry: Bist du noch sauer auf mich ? :oops:
Version 5.41 LTS :)
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Residents file auslesen.

Beitrag von _JON_ »

Ja, im englischen Forum gibt's ein Residents dumper

Der funktioniert allerdings überhaupt nicht oder die Struktur hat sich mittlerweile geändert,
ist ja auch schon 10 Jahre alt.

Auch warum dokumentiert man so ein Format nicht :(

Naja, wenn Ich mal etwas zu viel Zeit habe schreib Ich mal einen vernümftigen Dumper.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Residents file auslesen.

Beitrag von ts-soft »

Dann würde ich den Compiler das überlassen. Das CompilerInterface kann u.a. auch die Strukturen und Konstanten
ermitteln.

Code: Alles auswählen

STRUCTURE<T><Name>

  Request the content of a structure known by the compiler.
  Parameters: The name of the structure.
  Response  : The structure definition, with each member on one line. The output is terminated by a line
              containing 'OUTPUT<T>COMPLETE'.
sowie seit Version 5.10

Code: Alles auswählen

CONSTANTLIST (since 5.10)

  Request a listing of all constants known by the compiler.
  Parameters: none
  Response  : The first line contains the number of constants to return, then one constant
              per line, using the following syntax: TYPE<T>NAME<T>VALUE.
              TYPE can be one of the following value:
                0: numeric value (quad)
                1: float value (double)
                2: string value
              The output is terminated by a line containing 'OUTPUT<T>COMPLETE'.
Komplette erklärung des Compilerinterface im SDK, die Datei Compilerinterface.txt (was auch sonst :wink: )
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Residents file auslesen.

Beitrag von ts-soft »

Hab hier noch einen Beispielcode für Strukturen:

Code: Alles auswählen

EnableExplicit

Structure strucMember
  Name.s
  List Members.s()
EndStructure

Structure strucName
  List Name.strucMember()
EndStructure

Procedure GetStructures(*p.strucName)
  Protected.i Compiler = RunProgram(#PB_Compiler_Home + "Compilers\pbcompiler", "/STANDBY", "", #PB_Program_Open | #PB_Program_Read | #PB_Program_Write | #PB_Program_Hide)
  Protected.s tmp, Text
  
  If Compiler
    If IsProgram(Compiler)
      Repeat
        tmp = ReadProgramString(compiler)
      Until tmp = "READY"
      WriteProgramStringN(Compiler, "STRUCTURELIST")
      Repeat
        Text = ReadProgramString(Compiler)
        If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
          AddElement(*p\Name())
          *p\Name()\Name = Text
        EndIf
      Until Text = "OUTPUT" + #TAB$ + "COMPLETE"
      FirstElement(*p\Name())
      DeleteElement(*p\Name())
      ForEach *p\Name()
        WriteProgramStringN(Compiler, "STRUCTURE" + #TAB$ + *p\Name()\Name)
        Repeat
          Text = ReadProgramString(Compiler)
          If Text <> "OUTPUT" + #TAB$ + "COMPLETE"
            AddElement(*p\Name()\Members())
            *p\Name()\Members() = Text
          EndIf
        Until Text = "OUTPUT" + #TAB$ + "COMPLETE"        
      Next
      WriteProgramStringN(Compiler, "END")
      CloseProgram(Compiler)
    EndIf
  EndIf 
EndProcedure

Define.strucName structs
GetStructures(@structs)
With structs
  ForEach \Name()
    Debug "Structure " + \Name()\Name
    ForEach \Name()\Members()
      Debug "   " + \Name()\Members()
    Next
    Debug "EndStructure"
    Debug ""
  Next
EndWith
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Residents file auslesen.

Beitrag von _JON_ »

Danke ts-soft :allright:

Der Compiler kann das natürlich.
Also kurzer Hand mal alle anderen Residents in den Papierkorb verschoben
und was spukt der Compiler aus, die Strukturen meiner *.res :bounce:

Das gleiche noch mal wiederholt mit CONSTANT und CONSTANTLIST und der Tag ist gerettet :lurk:
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Residents file auslesen.

Beitrag von NicTheQuick »

Verrückt, ich krieg hier unter Linux folgende Meldung (nach Anpassen der Pfade und Parameter natürlich):

Code: Alles auswählen

STARTING	5.50	PureBasic 5.50 (Linux - x64)
ERROR	Can't load OS libraries, please re-install PureBasic.
Klappt ja super. :lol:
Na ich brauche es ja auch nicht, ich wollte nur mal gucken, ob es funktioniert.
Bild
Antworten