Seite 1 von 1

Fehler mit Declare

Verfasst: 10.09.2011 04:38
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)

Re: Fehler mit Declare

Verfasst: 10.09.2011 04:43
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)

Re: Fehler mit Declare

Verfasst: 10.09.2011 05:18
von edel
Naja, besser als gar nix. Danke dir.