![]() |
Copy und Delete ohne Strings
Hey,
ich habe folgenden kleinen Code:
Delphi-Quellcode:
Okey noch schlimmer als gedacht .. natürlich kennt das Programm auch kein Copy und kein Delete .. kann man das irgendwie mit inline Assebler regeln?
S1 := Copy(S, 1, 255);
Delete(S, 1, 255); S2 := Copy(S, 256, 255); Gruß Florian |
Re: Copy und Delete ohne Strings
Öhm... bist du dir sicher, dass das so nicht funktioniert? Solange der Delphi-Compiler, mit dem du den Maschinencode erzeugst, das alles versteht sollte es doch reichen...
|
Re: Copy und Delete ohne Strings
Ne funktioniert wirklich nicht. Das liegt am Injizieren. Habs allerdings grade hinbekommen. S1 und S2 als ShortString deklarieren und folgendes verwenden:
Delphi-Quellcode:
CopyMemory(@S[1], Mem, 510);
CopyMemory(@S1[1], @S[1], 255); CopyMemory(@S2[1], @S[256], 255); |
Re: Copy und Delete ohne Strings
du solltest eventuell einen Teil des durchgestrichenen im ersten Beitrag entfernen damit man auch weiß warum copy etc. nicht funktioniert. Ansonsten ist es ein recht arger krampf den durchgestrichenen Text zu lesen. Zumal man denkt das der durchstrichene Text irrelevant ist eben weil er gestrichen wurde.
|
Re: Copy und Delete ohne Strings
Sowas?
Delphi-Quellcode:
Aber du kannst ja immer noch die APIs benutzen, lstrlen etc.
function MyLength(s: string): Integer;
begin asm xor ecx, ecx cmp dword ptr [s], 0 je @@exit mov eax, [s] @@start: inc ecx cmp byte ptr [eax+ecx], 0 jne @@start @@exit: mov [result], ecx end; end; function MyCopy(s: string; start, len: Integer): string; var x: Integer; begin result := ''; if (start >= 0) and (len >= 0) then begin for x := start to (start + len) -1 do begin result := result + s[x]; end; end; end; procedure MyDelete(var s: string; start, len: Integer); var x: Integer; tmp: string; begin if (start >= 0) and (len >= 0) then begin tmp := ''; if (start > 1) then begin for x := 1 to start -1 do begin tmp := tmp + s[x]; end; end; x := (start + len); repeat tmp := tmp + s[x]; x := x +1; // kein inc >_> until s[x] = #0; // achtung prüft nur auf #0 zeichen! s := tmp; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz