Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Alternative zu StrpCopy gesucht

  Alt 7. Aug 2005, 23: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.
  Mit Zitat antworten Zitat