tsdima писал(а):
WideString(Pointer(Result)) или WideString(Result), в данном случае скорее всего не безразличноДа, все правильно...
Дополнительный преобразователь типа Pointer, это способ "надурить самого себя", т.е., заставить "не заметить для уничтожения" объект который таки создается.
Правда уже внутри _WStrFromPCharLen
Одним из двух способов: _WStrFromPWCharLen(Dest, @Buffer, DestLen), или _WStrSetLength(Dest, DestLen)
Скажем первый, выглядит так:
asm
{ -> EAX Pointer to WideString (dest) }
{ EDX Pointer to characters (source) }
{ ECX number of characters (not bytes) }
TEST ECX,ECX
JE _WStrClr
PUSH EAX
PUSH ECX
PUSH EDX
CALL SysAllocStringLen
TEST EAX,EAX
JE WStrError
POP EDX
PUSH [EDX].PWideChar
MOV [EDX],EAX
CALL SysFreeString
end;