Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2008-03-12 16:02:36 ЛС | профиль | цитата
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;
карма: 9

0