nochmal Klassen ...

02/08/2008 - 10:24 von Jens Kallup | Report spam
Hallo,

mal angenommen ich habe das folgende Sprachkonstrukt:

local r
r = new TestKlasse()
... // nochmehr code
r.Open

class TestKlasse of Form
with (this)
left = 20
top = 10
endwith
endclass

wie würdet ihr den Aufruf bewerkstelligen.
also, das TestKlasse aufgerufen wird vor den Open
und dann mit Open geöffnet wird.
sollte ich erstmal den gesamten code durchrattern lassen?

mir schwebt eine idee gerade im kopfe:
bei r = new ...

den klassenname speichern und dann temporàr den type
pushen

also in der art:

push ctype_name
push ctype_ctypename
...
section .data
ctype_name: db "klasse",0
ctype_typename : dw 1
// 1 für FORM
// 2 für PUSHBUTTON ...
usw.

mfg
jens
 

Lesen sie die antworten

#1 Jens Kallup
02/08/2008 - 17:17 | Warnen spam
Habe nun folgenden Code, der automatisch generiert wird:


BITS 32
cpu 486

section .data
global a,b,c
LClassProperty_top: dw 1
LClassPropertyValue_top: dq 200
LClassProperty_height: dw 4
LClassPropertyValue_height: dq 340
LClassProperty_left: dw 2
LClassPropertyValue_left: dq 250
LClassProperty_width: dw 3
LClassPropertyValue_width: dq 890

section .text
extern Fix2Gleit, Ausgabe
extern _set_this_wert
global _start_main
_start_main:
push ebp
mov ebp, esp
sub esp, 32
push LClassType_masterforma
call LClassName_masterforma
ret

section .data
LClassType_masterforma: dw 1
LClassNameStr_masterforma: db "masterforma",0

section .text
LClassName_masterforma:
push LClassNameStr_masterforma
push LClassProperty_top
push LClassPropertyValue_top
call _set_this_wert
push LClassNameStr_masterforma
push LClassProperty_height
push LClassPropertyValue_height
call _set_this_wert
push LClassNameStr_masterforma
push LClassProperty_left
push LClassPropertyValue_left
call _set_this_wert
push LClassNameStr_masterforma
push LClassProperty_width
push LClassPropertyValue_width
call _set_this_wert
ret


die set_this_wert Funktion ist hier:


extern "C" __declspec(dllexport) int set_this_wert(float wert, float pt, char *cn)
{
char buffer[200];

sprintf(buffer,"--> %s, we: %f, pt: %f",cn,wert,pt);
MessageBox(0,buffer,"Info",0);
return 0;
}


der Parameter "char *cn" der Funktion wird angenommen.
Allerdings habe ich Probleme, die beiden Pararmeter "wert" und "pt"
aufzulösen. Im buffer steht 00 00.
Hat da jemand einen Idee wieso das so ist?
normal dürfte bei

push LClassNameStr_masterforma
push LClassProperty_top
push LClassPropertyValue_top
call _set_this_wert

top = 200 sein ... aber dss Ergebnis in der Funktion oben
ist 0 :-(



Danke für Tipps
Jens

Ähnliche fragen