Ich habe jetzt ein Problem:
Die
System.pas aud D2007 crasht, das bedeutet, das ich immer eine
AV erhalte.
Die Zelennummer ist 12345.
Delphi-Quellcode:
procedure _LStrAsg(
var dest;
const source);
{$IFDEF PUREPASCAL}
var
S, D: Pointer;
P: PStrRec;
Temp: Longint;
begin
S := Pointer(source);
if S <>
nil then
begin
P := PStrRec(Integer(S) - sizeof(StrRec));
if P.refCnt < 0
then // make copy of string literal
begin
Temp := P.length;
S := _NewAnsiString(Temp);
Move(Pointer(source)^, S^, Temp);
P := PStrRec(Integer(S) - sizeof(StrRec));
end;
InterlockedIncrement(P.refCnt);
end;
D := Pointer(dest);
Pointer(dest) := S;
if D <>
nil then
begin
P := PStrRec(Integer(D) - sizeof(StrRec));
if P.refCnt > 0
then
if InterlockedDecrement(P.refCnt) = 0
then
FreeMem(P);
end;
end;
{$ELSE}
asm
{ -> EAX pointer to dest str }
{ -> EDX pointer to source str }
TEST EDX,EDX
{ have a source? }
JE @@2
{ no -> jump }
MOV ECX,[EDX-skew].StrRec.refCnt
INC ECX
JG @@1
{ literal string -> jump not taken }
PUSH EAX
PUSH EDX
MOV EAX,[EDX-skew].StrRec.length
CALL _NewAnsiString
MOV EDX,EAX
POP EAX
PUSH EDX
MOV ECX,[EAX-skew].StrRec.length
CALL Move
POP EDX
POP EAX
JMP @@2
@@1:
LOCK INC [EDX-skew].StrRec.refCnt
@@2: XCHG EDX,[EAX]
TEST EDX,EDX
//<-- da crasht es
JE @@3
MOV ECX,[EDX-skew].StrRec.refCnt
DEC ECX
JL @@3
LOCK
DEC [EDX-skew].StrRec.refCnt
JNE @@3
LEA EAX,[EDX-skew].StrRec.refCnt
CALL _FreeMem
@@3:
end;
{$ENDIF}
Woher kommt das und wie ändere/behebe ich den Fehler?
Nach einem Debugen kamen plötzlich massenhaft Fehler:
Fehler
Erzeugen
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
[Pascal Fataler Fehler]
system.pas(1748): F2051
Unit SysInit wurde mit einer unterschiedlichen Version von
System.@RunError compiliert
Kann es die Prozedur TryStrToFloat sein, die den Fehler verursacht?
Mein Aufruf ist
TryStrToFloat(values1[l],dvalue1);
values1 ist ein array of String und dValue1 ist Single.
[edit]
Es schein hier irgendwas nicht zu funktionieren...
Delphi-Quellcode:
for i := 0 to Length(values)-1 do
begin
if not odd(i) then
begin
values1[j] := values[i];
j := j+1;
end
else
begin
values2[k] := values[i];
k := k+1;
end;
end;
[/edit]
[edit=2]
der Übeltäter scheint j := j+1 zu schein. j ist ein Integer, aber ich verstehe nicht weshalb das nicht funktioniert.[/edit]