Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2008-03-14 17:31:55 ЛС | профиль | цитата
Galkov писал(а):
А что там со счетчиком ссылок после этого - совсем непонятно

tsdima, вообще-то там, на эту тему, смешно как-то получается...
Посмотри внимательней


#pas
function _WStrAddRef(var str: WideString): Pointer;
asm
MOV EDX,[EAX]
TEST EDX,EDX
JE @@1
PUSH EAX
MOV ECX,[EDX-4]
SHR ECX,1
PUSH ECX
PUSH EDX
CALL SysAllocStringLen
POP EDX
TEST EAX,EAX
JE WStrError
MOV [EDX],EAX
@@1:
end;

Внимание, логическое утверждение: ЕСЛИ widestring в дельфях также имеет счетчик ссылок, ТОГДА это реализовано в ВИНДЕ (oleaut32.dll)

Т.е., если SysAllocStringLen имеет аргументом свой же результат, то он не меняется, но увеличивается некий RefCount, который учитывается при SysFreeString и SysReAllocString, SysReAllocStringLen

Что характерно, в MSDN про это ни слова не нашел...
tsdima, может ты встречал
карма: 9

0