habe eine Methode wo 2 Zahlen von einer Funktion zurückgegeben werden, welche Zufallszahlen zurückgibt. Diese sollen dann in der Methode addiert werden. Die Variable die das Ergebnis erhalten soll, behielt jedoch ihren alten wert. Ich führte dann weiter oben zum Testen ein paar Additionen aus, welche auch zu einen Ergebnis führten. Also mußte der Fehler entweder auf der Random-Funktion basieren oder auf etwas anderem.
Beim näheren hinsehen erkannte ich in der Assembleransicht, daß zwar ein mov und ein add - Befehl ausgeführt wird und das Ergebnis steht dann auch in EAX, jedoch wird dies nicht in iSumme gespeichert.
Hier der Quelltext der Methode, die zwei Zufallszahlen addieren soll.
Code: Alles auswählen
// Öffentliche Methode, um die Testreihe zu starten
procedure TForm1.ButtonTestlaufStartenClick(Sender: TObject);
var
iZahl1, iZahl2, iSumme: integer;
begin
iSumme:= 0;
iSumme:= 3+5;
iZahl1:= 7;
iZahl2:= 7;
iSumme:= iZahl1 + iZahl2;
iZahl1:= GetRand(0, 1, 100);
iZahl2:= GetRand(0, 1, 100);
iSumme:= iZahl1 + iZahl2; // Ergebnis wird nicht in iSumme gespeichert
end;
Hier noch der Quelltext, wo die Zufallszahlen generiert und zurückgegeben werden.
Code: Alles auswählen
// Öffentliche Funktion, um Zufallszahlen innerhalb eines über die Parameter fest-
// gelegten Bereichs zu erzeugen und zurückzugeben.
function TForm1.GetRand(iParamNoNum, iParamUnder, iParamUpper: integer
): integer;
var
iASC: integer;
begin
repeat
// iASC:= Random(iParamUnder) + (iParamUpper - iParamUnder);
iASC:= Random(iParamUpper);
until (iASC > iParamUnder) and (iASC < iParamUpper)
and (iASC <> iParamNoNum);
result:= iASC;
end;
Nun ist die Frage, warum das Ergebnis nicht in iSumme gespeichert wird. Der Compiler scheint am Ende der Methode den Befehl nicht vollständig zu übersetzen.