SHBrowseForFolder

Тема в разделе "WASM.WIN32", создана пользователем ISergey, 27 сен 2004.

  1. ISergey

    ISergey New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    3
    Адрес:
    Россия
    При работе с SHBrowseForFolder как освобождать отведенную память?

    В SDK сказано что это необходимо:

    "The calling application is responsible for freeing the returned item identifier list using the shell's task allocator."

    Но вариант GlobalHandle, GlobalUnlock и GlobalFree не работает :dntknw:
     
  2. Julius

    Julius New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2003
    Сообщения:
    42
    Вот, что написано в 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.

    А вот и пример как это использовать.



    [​IMG] 1664499701__txt.Asm
     
  3. ISergey

    ISergey New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    3
    Адрес:
    Россия
    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 в асме?
     
  4. Julius

    Julius New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2003
    Сообщения:
    42
    http://www.wasm.ru/publist.php?list=15

    В принципе этого достаточно, в качестве общей теории.

    Описание самого интерфейса iMalloc есть в MSDN'e.

    Там же и назначение всех параметров для всех методов.

    Отличие от C++ состоит только в том, что при вызове каждого метода необходимо передавать указатель this на экземпляр интерфейса с которым ты работаешь, С++ это делает самостоятельно.

    По сути интерфейс iMalloc - это переходник для работы с кучей.
     
  5. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    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.

    [​IMG] 1611859806__BrowseForFolder.Inc
     
  6. zzzyab

    zzzyab New Member

    Публикаций:
    0
    Регистрация:
    13 май 2004
    Сообщения:
    115
    А еще есть что-то для выбора каталогов ер. win16, win32s, нехочу я с ОLЕ и все.
     
  7. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    zzzyab



    Если присутствует в COM-объекте интерфейс IDispatch - работать с объектом очень просто. Как? Смотри здесь.