Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

EnumObjects [D6, WinXP]


psa247 ©   (2005-05-22 19:47:00) 

Bin.EnumObjects(0, SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN, enm);

Как высвободить память из-под enm? В MSDN написано:
The calling application must free the returned IEnumIDList object by calling its Release method.


У меня выводит сообщение:
---------------------------
Debugger Exception Notification
---------------------------
Project UMP.exe raised exception class EPrivilege with message 'Privileged instruction'. Process stopped. Use Step or Run to continue.


VMcL   (2005-05-22 22:24:00) [1]

>> psa247 ©   (22.05.05 19:47)

Это для C/C++. В Delphi для переменных интерфейсного типа Release() вызвается автоматически при выходе переменной из области видимости или переприсваивании.


Ученик   (2005-05-22 20:42:00) [2]

>psa247 ©   (22.05.05 20:23) [2]



{ system.pas }

function _IntfClear(var Dest: IInterface): Pointer;
asm
       MOV     EDX,[EAX]
       TEST    EDX,EDX
       JE      @@1
       MOV     DWORD PTR [EAX],0
       PUSH    EAX
       PUSH    EDX
       MOV     EAX,[EDX]
       CALL    DWORD PTR [EAX] + VMTOFFSET IInterface._Release
       POP     EAX
@@1:
end;


В отладчике можно увидеть вызов IntfClear


psa247   (2005-05-22 20:23:00) [3]

Не владею англ. профессионально, а что сие в переводе?
by calling its Release method


Ученик   (2005-05-22 20:10:00) [4]

>psa247 ©   (22.05.05 19:47)  
enm := nil или вообще ничего не делать, само освободится


Наверх

Титульная страница Поиск, карта сайта Написать письмо