Fehler mit Declare

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Fehler mit Declare

Beitrag von edel »

Fuehrt man folgenden Code aus, schmiert das Programm, beim Verlassen von A(), ab.

Code: Alles auswählen

Declare B(a)

ProcedureC A(a,b,c)
	B(a)
EndProcedure

ProcedureC B(a)	
EndProcedure

A(a,b,c)
B(a)
Schaut man sich den ASM Code an, sieht man das da irgendwas nicht so stimmen kann.
Der Stack sollte doch nach dem aufrufen einer CDECL Funktionen wieder in den Ursprungszustand
gebracht werden.

Code: Alles auswählen

push a
call B
add esp,4  
Im ASM Code steht dann aber sowas :

Code: Alles auswählen

; ProcedureC A(a,b,c)
macro MP2{
_Procedure2:
  PS2=4                                                                                                                                                                                                                                                     
; B(a)
  PUSH   dword [esp+PS2+0]
  CALL  _Procedure0
; EndProcedure
  XOR    eax,eax
_EndProcedure3:
  RET
}
Von "add esp,4" keine Spur. Der Stack ist verschoben und das Programm schmiert ab. Den Fehler scheint
es aber nur zu geben, wenn man Declare (kann es sein das ich nen "DeclareC" uebersehen habe?)
verwendet und die Funktion tatsaechlich erst nach dem Aufrufen definiert wurde.

Getestet hab ich mit der aktuellen Version 4.51 und 4.60 RC1 (32bit)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fehler mit Declare

Beitrag von STARGÅTE »

In der Tat kannst du nicht Declare für ProcedureC nutzen.
Allerdings habe ich auch kein DeclareC gefunden, sondern nur DeclareCDLL.

Als abhilfe kannst du also erst mal das nutzen:

Code: Alles auswählen

DeclareCDLL B(a)

ProcedureC A(a,b,c)
   B(a)
EndProcedure

ProcedureCDLL B(a)   
EndProcedure

A(a,b,c)
B(a)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Fehler mit Declare

Beitrag von edel »

Naja, besser als gar nix. Danke dir.
Antworten