При работе с SHBrowseForFolder как освобождать отведенную память? В SDK сказано что это необходимо: "The calling application is responsible for freeing the returned item identifier list using the shell's task allocator." Но вариант GlobalHandle, GlobalUnlock и GlobalFree не работает
Вот, что написано в MSDN: The calling application is responsible for freeing the returned PIDL with the Shell allocator's IMalloc::Free method. To retrieve a handle to the Shell allocator's IMalloc interface, call SHGetMalloc. А вот и пример как это использовать. 1664499701__txt.Asm
Julius, cпасибо за ответ. Уже сам закопался в MSDNe. Шаги простые: 1. SHGetMalloc(&g_pMalloc), где LPMALLOC g_pMalloc; 2. SHGetDesktopFolder(&pFolder), где LPSHELLFOLDER pFolder 3. Если 1 и 2 ОК, тогда g_pMalloc->Free(pFolder) Но как работать в асме с interface (LPMALLOC)? В 1664499701__txt.Asm это показано, но хотелось бы почитать инфу поподробнее ... В связи с этим более общий вопрос: Где можно почитать об interface в асме?
http://www.wasm.ru/publist.php?list=15 В принципе этого достаточно, в качестве общей теории. Описание самого интерфейса iMalloc есть в MSDN'e. Там же и назначение всех параметров для всех методов. Отличие от C++ состоит только в том, что при вызове каждого метода необходимо передавать указатель this на экземпляр интерфейса с которым ты работаешь, С++ это делает самостоятельно. По сути интерфейс iMalloc - это переходник для работы с кучей.
In attachment you can find an include that I use to implement Folder Browsing. Honestly speaking it was written based on code from masm32:BrowseForFolder and changed slightly to make it work on its own. 1611859806__BrowseForFolder.Inc
zzzyab Если присутствует в COM-объекте интерфейс IDispatch - работать с объектом очень просто. Как? Смотри здесь.