hi Hagen
ich habe mal ne kleines test-interface zusammengebastelt
ich deklariere ein interface
initialisiere mit einer function meine felder und die
VMT
soweit läuft alles prima *juhu*
nun bereiten mir aber aufrufe denen ich einen parameter übergebe probleme
Delphi-Quellcode:
type
IMyInterface = Interface(IInterface)
function GetName: String; stdcall;
procedure SetName(Name: String); stdcall;
function GetRefCount: Integer; stdcall;
property Name: String read GetName write SetName;
end;
wenn ich
TestInterface.Name:='Hallo! ;)';
aufrufe pusht er zuerst den zeiger auf den string
dann pusht er den zeiger auf meinen interface record
dann call't er die funktion SetName(Name: String)
soweit alles ok *freu*
jetzt kommt der übliche stackrahmen (push ebp, mov ebp,esp......) und dann will er den referenzzähler des string erhöhen, und das geht schief
der holt sie den falschen zeiger vom stack ( ->
exception).... generell verwechselt er die var's aufm stack
die sind alle um eins verschoben..... ich denke mal das das interface automatisch ein self aufn stack haut(macht er ja auch), und vom compiler wird das in der function nicht berücksichtigt
gibts für das problem ne lösung?
mfg Dano