Registriert seit: 20. Jan 2008
Ort: Nürnberg
340 Beiträge
FreePascal / Lazarus
|
AW: Kommischer EERange Rror Zugriffsverletzung
14. Nov 2012, 13:18
Wesentlich weiter oben, ich post mal den ganzen funktions code:
Delphi-Quellcode:
function TForm1.extractfuncs(var statevar: string; const endswitch: integer;
code: TStrings): boolean;
var
kommentar: boolean;
newfunc: boolean;
k: integer;
j, i, l: integer;
tmp: integer;
Count, count2: integer;
foo: string;
begin
Count := 0;
count2 := 0;
tmp := 0;
Result := False;
//showmessage(inttostr(endswitch));
for i := endswitch to code.Count do
(*Für alle Zeilne vom letzten Status bis ende des Files*)
begin
if i = 2091 then
sleep(1);
newfunc := False;
if (pos('/*', code[i]) > 0) then
kommentar := True;
if (pos('{', code[i]) > 0) then
(*Klammer auf registrieren, könnte die gescuhte funktion sein*)
begin
if kommentar then
begin
if ((pos('{', code[i]) < pos('/*', code[i])) and not
(pos('{', code[i]) = 0)) or
((pos('{', code[i]) > pos('*/', code[i])) and not
(pos('*/', code[i]) = 0)) then
begin
Inc(Count);
if Count = count2 + 1 then
j := i;
(*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*)
end;
end
else
begin
Inc(Count);
if Count = count2 + 1 then
j := i;
(*Falls eine Klammer auf mehr als Klammer zu, merk dir die Zeile*)
end;
end;
if pos('}', code[i]) > 0 then
if kommentar then
begin
if ((pos('}', code[i]) < pos('/*', code[i])) and not
(pos('}', code[i]) = 0)) or
((pos('}', code[i]) > pos('*/', code[i])) and not
(pos('*/', code[i]) = 0)) then
begin
Inc(Count2);
end;
end
else
begin
Inc(Count2);
end;
if (pos(statevar, code[i]) > 0) and not (pos('==', code[i]) > 0) and
(pos('=', code[i]) > 0) and not kommentar then
(*Wenn switch variable gefunden, dann*)
begin
while pos('(', code[j]) = 0 do
(*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*)
j := j - 1;
loadfunc(newfunc, j, tmp, code);
end;
foo := code[i];
l := high(changefuncs);
//if ((i = 1543) or (i = 1545)) then
// ShowMessage(changefuncs[l - 1].Name);
if sametext(statevar, 'GSMData.State') then
sleep(1);
for k := Low(changefuncs) to high(changefuncs) do
begin
if (pos(changefuncs[k].Name, foo) > 0) and not newfunc and not
kommentar then
begin
while (pos('(', code[j]) = 0) or (pos(');', code[j]) > 0) or
(pos('if', code[j]) > 0) do
(*Beweg dich solang Rückwärts bis eine Rundeklammer zu kommt (da dies die funktion bestimt)*)
j := j - 1;
loadfunc(newfunc, j, tmp, code);
end;
end;
if (pos('*/', code[i]) > 0) then
kommentar := False;
if newfunc then
Result := True;
end;
end;
Philipp N. "Programmiern ist wie küssen:
Mann kan darüber reden, mann kann es beschreiben,
aber man weiss erst, was es bedeutet,
wenn man es getan hat"
Geändert von PhilmacFLy (14. Nov 2012 um 13:42 Uhr)
|