Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
Re: Alternative zu StrpCopy gesucht
8. Aug 2005, 00:15
Ein PChar ist auch nullterminierend und die Compilermagic nimmt einem da was ab:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
s: String;
p: PChar;
begin
s := 'Hello World';
p := PChar(s);
ShowMessage(p);
end;
Ansonsten, StrpCopy ruft StrLCopy auf:
Delphi-Quellcode:
function StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;
asm
PUSH EDI
PUSH ESI
PUSH EBX
MOV ESI,EAX
MOV EDI,EDX
MOV EBX,ECX
XOR AL,AL
TEST ECX,ECX
JZ @@1
REPNE SCASB
JNE @@1
INC ECX
@@1: SUB EBX,ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,EDI
MOV ECX,EBX
SHR ECX,2
REP MOVSD
MOV ECX,EBX
AND ECX,3
REP MOVSB
STOSB
MOV EAX,EDX
POP EBX
POP ESI
POP EDI
end;
function StrPCopy(Dest: PChar; const Source: string): PChar;
begin
Result := StrLCopy(Dest, PChar(Source), Length(Source));
end;
Nachtrag:
Das Rumhantieren mit nullterminuierenden Strings ist meist überflüssig. Oft reicht zum Schluss ein Cast nach PChar, Pointer oder in dem man einen Zeiger auf das erste Zeichen des Strings angibt:
Delphi-Quellcode:
var
s: String;
begin
s := 'Hello world';
Messagebox(hWnd, PChar(s), ...
Messagebox(hWnd, Pointer(s), ...
Messagebox(hWnd, @s[1], ...
Michael Ein Teil meines Codes würde euch verunsichern.
|
|
Zitat
|