Variable erhält bei Zuweisung immer Parameter der Prozedur

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Variable erhält bei Zuweisung immer Parameter der Prozedur

Beitrag von PMV »

... wenn ich den Post geschrieben hab brauch ich erst mal ne Ablenkung
... hab mich grad tierisch aufregen müssen /:-> ... und bin jetzt total
fertig und am ende :cry:

Also folgende Prozedur funktioniert nicht so, wie sie soll:

Code: Alles auswählen

Structure Profile
  Name.s{10}
  Level.b
  Points.l
  Sex.b
  X.b
  Y.b
  Map.b 
EndStructure
Global Profile.Profile
Procedure LoadProfile(File$) 
  Protected File.l, String$
  File = ReadFile(#PB_Any, "Profiles" + File$)
  File$ = ""
  If Not File : ProcedureReturn #False : EndIf
  String$ = RemoveString(ReadString(File), Chr(34))
  Profile\Name = String$
  Debug "String$ = " + String$
  Debug "Profile\Name = " + Profile\Name
  ReadData(File, @Profile + 10, SizeOf(Profile)-10)
  CloseFile(File)
  ProcedureReturn #True
EndProcedure
Die Prozedur hat selber keinen Fehler, das ist ein interner Fehler von
PureBasic ... das ist 100% klar, aber ich weis nicht wie ich ihn umgehen
soll -.- ... naja gut, also ein Beispiel:

Code: Alles auswählen

LoadProfile("Profile.000")
Debugger Ausgabe hat geschrieben:String$ = PMV
Profile\Name = Profile.00
Profile\Name ist auf 10 Zeichen festgelegt :D, daher wird die letzte 0
abgeschnitten ;-)

Ich habs schon versucht, die selbe Prozedur alleine zu Compilieren, aber
dort tritt der Fehler nicht mehr auf. Also lohnt sich auch nicht, mehr Code
zu zeigen. Wer sich mit ASM auskennt und ein wenig Zeit hat möchte sich
bitte hier melden. Ich wäre euch sehr sehr dankbar wenn ihr den Fehler
für mich finden könntet. Da ich kein (kaum) Englisch kann und der
Quellcode komplet in Deutsch kommentiert ist spare ich mir erst mal das
direkte Kontaktieren von Fred :D . Allerdings dürfte es wirklich nur um
den ASM-Output dieser Prozedur gehen. Hoffe aber ihr könnt mir helfen,
dann können wir Fred den genauen Fehler mitteilen <)
Der restliche Quellcode hat einige tausend Zeilen :wink: . Da das ganze
eh am ende veröffentlicht wird, wäre es aber kein Problem auf anfrage
den Quellcode dem jenigen zum Testen zu schicken. Da das ganze aber
noch lang nicht fertig ist möchte ich auch nicht unbedingt einen
öffentlichen Link angeben :D . Ich kanns auch per E-Mail schicken.
Einfach schreiben ob PN (Link) oder per E-Mail (als Anhang), bei
zweiterem ist ne E-Mail addy hilfreich *gg*

Ach ja, klar könnte ich das zum anlass nehmen, mir das erste mal selber
eine ASM-Output-Datei anzuschauen. Aber selbst wenn ich den
entsprechenden Code finde ... kann ich immer noch nicht sagen was war.
Naja vielleicht mach ich das in ein paar Stunden wenn ich wieder klar
denken kann /:-> und noch keiner was hat. Aber das hilft immer noch
nicht dabei, den Fehler zu umgehen :D .

Ansonnsten danke fürs Interesse :D

Edit: Beta-Updates von purebasic.com alle installiert (Stand: 19.08.06)

MFG PMV
Zuletzt geändert von PMV am 20.08.2006 01:10, insgesamt 2-mal geändert.
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

im Thread "Smartupdate für PB4 noch nicht Online ?"
ts-soft hat geschrieben:Bis es soweit ist, möglichst die Veröffentlichten Betas installieren:
http://www.purebasic.com/beta/
Weil die mehrere schwerwiegende Bugs beheben (vor allem in der File lib)
Ich denk mal die hervorhebung der Filelibrary gallt mir :lol:
(wenn dem nicht so ist auch nicht schlimm *gg*)
Aber wie auch immer, ich hab natürlich wirklich nicht an die Beta-Updates
auf purebasic.com gedacht. Naja, bei meinem gedächnis hab ich das auch
morgen wieder vergessen /:-> .
Auf jeden fall hab ich die Dateien runter geladen und in
PureBasic\PureLibraries kopiert. Aber es hat nicht den gewünschten
Erfolg gebracht. Das Problem besteht weiter hin :cry:
Trotzdem danke für den hinweiß ts-soft :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

mal ne dumme Anfrage...
Ähm - sicher das der Code Fehlerfrei ist?

Dein Codebeispiel lässt sich ohne Kontextcode nicht so recht Prüfen bzw. es ist nicht klar, welche Alternativen für Dich in Frage kommen.

Die Variable File liegt als protectet Long und als übergebene String vor.
Ist das in Ordnung?
Wo hast Du zuletzt den String PMV eingegeben?

grüsse an alle
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Es ist sicher, das der Quellcode fehlerfrei ist. Alleine ist er ausführbar.
Hier fehlt natürlich die Struktur und die entsprechende Datei :wink:. Ich
kann die Struktur noch dazu schreiben, aber wie schon geschrieben tritt
der Fehler nur mit kompletem Quellcode ein.

Die Prozedur hab ich hierfür noch ein bischen Modefiziert im Beitrag
selber, kann sein das sich da ein kleiner Fehler eingeschleust hat, aber
selbst wenn, es ist nicht der Fehler der mich so quält :D .

Der String "PMV" steht in der Datei "Profile.000" und wird auch richtig
ausgelesen, das beweist das die Variable String$ den richtigen Wert hat.
Aber bei der zuweiseung "Profile\Name = String$" passiert ein Fehler,
denn Profile\Name hat immer den wert des Parameters File$.

Ach ja, File$ <> File.l :wink:

Trotzdem danke das du dir das wenigstens angeschaut hast <)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

OK,
Danke fürs Codeedit :wink:
wie Du es schon geschrieben hast, die Procedure alleine scheint zu gehen:

Code: Alles auswählen

 File$ = "Profile.000.txt";habe ich mal so genannt - steht PMV drin

Structure Profile 
  Name.s{10} 
  Level.b 
  Points.l 
  Sex.b 
  X.b 
  Y.b 
  Map.b 
EndStructure 

Global Profile.Profile 

Procedure LoadProfile(File$)
 
  Protected File.l, String$ 
  File = ReadFile(#PB_Any, File$) 
  File$ = "" ;nur diese Procedure - nicht nötig
  If Not File : ProcedureReturn #False: EndIf 
  String$ = RemoveString(ReadString(File), Chr(34)) 
  Profile\Name = String$ 
  Debug "String$ = " + String$ ;=PMV
  Debug "Profile\Name = " + Profile\Name ;=PMV
  ReadData(File, @Profile + 10, SizeOf(Profile)-10) 
  CloseFile(File) 
    ProcedureReturn #True 
    
EndProcedure

Debug LoadProfile(File$)

Wird schwer sein, festzustellen woran es liegt.
Vieleicht kann ja jemand den Fehler reproduzieren.Mal sehen.Ansonsten - hast Du schon eine Alternative?

grüsse an alle
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Also ich hab den Fehler jetzt umgehen können. *megafreu*
Ich hab den fixen String aus der Struktur entfernt und einen normalen
String drauß gemacht. Jetzt gibt es keine Fehler mehr, auch wenn die
Lösung nicht ganz so elegant ist ...

Code: Alles auswählen

Structure Profile
  Level.b
  Points.l
  Sex.b
  X.b
  Y.b
  Map.b 
  Name.s
EndStructure
Global Profile.Profile
Procedure LoadProfile(File$) 
  Protected File.l
  File = ReadFile(#PB_Any, "Profiles\" + File$)
  If Not File : ProcedureReturn #False : EndIf
  Profile\Name = RemoveString(ReadString(File), Chr(34))
  ReadData(File, @Profile, 9);SizeOf(Profile))
  Debug "Profile\Name = " + Profile\Name
  CloseFile(File)
  ProcedureReturn #True
EndProcedure
Somit dürfte der Fehler bei dem neuen Feature fixe Strings liegen. Gibs
für die fixen Strings schon diverse Bug-Meldungen (z.B. im englischen
Forum)? Da sind hier ja einige wesentlich Informierter als ich -.-

Ansonnsten werd ich wohl mal mit Fred Kontakt aufnehmen müssen /:->
und das mit meinem Englisch, na das kann ja was werden :freak: ... aber
nicht heute^^

Ach ja, das Angebot, den Quellcode auf Anfrage zu versenden damit
derjenige sich das Problem genauer anschauen kann, steht immer noch
:wink: . Würde Fred entlassten und er hätte mehr Zeit für die Linux-
Version :lol: Außerdem könntet ihr ihm sicher in besserem Englisch das
problem schildern /:->

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Gesperrt