у меня XE и там вызывается вот это, но смысла это не меняет:
Код:
procedure _UStrFromPWCharLen(var Dest: UnicodeString; Source: PWideChar; CharLength: Integer);
{$IFDEF PUREPASCAL}
var
Temp: Pointer;
begin
Temp := Pointer(Dest);
if CharLength > 0 then
begin
Pointer(Dest) := _NewUnicodeString(CharLength);
if Source <> nil then
Move(Source^, Pointer(Dest)^, CharLength * SizeOf(WideChar));
end
else
Pointer(Dest) := nil;
_UStrClr(Temp);
end;
{$ELSE}
asm
{ -> EAX pointer to dest }
{ EDX source }
{ ECX length in characters }
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX // EBX := addr of Dest (result) in EBX
MOV ESI,EDX // ESI := source
MOV EDI,ECX // EDI := length
{ allocate new string }
MOV EAX,EDI // EAX := length
CALL _NewUnicodeString // EAX := new string (result)
MOV ECX,EDI // ECX := length
MOV EDI,EAX // EDI := result
TEST ESI,ESI // nil source?
JE @@noMove
MOV EDX,EAX // EDX := result (dest for Move)
MOV EAX,ESI // EAX := source (source for Move)
SHL ECX,1 // ECX := ECX * 2 (turn length into characters)
CALL Move
{ assign the result to dest }
@@noMove:
MOV EAX,EBX
CALL _LStrClr
MOV [EBX],EDI
POP EDI
POP ESI
POP EBX
end;
{$ENDIF !PUREPASCAL}
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.
Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.