RSDN handle library
От: Аноним  
Дата: 18.12.02 06:31
Оценка: 1440 (21) +3
Статья:
RSDN handle library
Автор(ы): Павел Блудов, Александр Корсуков, Владислав Чистяков
Дата: 09.06.2004
Библиотека классов-оберток для объектов ядра windows.


Авторы:
VladD2
Блудов Павел
Sashko

Аннотация:
Библиотека классов-оберток для объектов ядра windows.
Re: Название библиотеки
От: Блудов Павел Россия  
Дата: 11.12.08 08:12
Оценка: 26 (1) :))) :))
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Очень вкусно выглядит! Спасибо! Но есть маленькое предложение — переименовать эту библиотеку в HTL (Handle Template Library). Будет единообразно с ATL и WTL.


Done За это время моя средняя дочь успела родиться, вырости и пойти в школу.

Выложил в http://www.codeplex.com/htl
Svn-cсылка https://htl.svn.codeplex.com/svn/trunk

По умолчанию ведёт себя как ATL, т.е. добавляет
using namespace HTL;

Чтобы не было конфликтов с ATL::CEvent и т.п. Нужно делать так:
#define _HTL_NO_AUTOMATIC_NAMESPACE
#include <htl.h>
htl handle template library
Re[4]: RSDN handle library
От: _nn_  
Дата: 23.07.04 15:10
Оценка: 4 (1)
Здравствуйте, Дарней, Вы писали:

Надеюсь вы не против критики

Мне кажется что лучше использовать Traits вместо параметра в виде указателя на функцию.
struct Handle_Traits_Base
{
 static HANDLE InitValue() { return INVALID_HANDLE_VALUE; }
};

struct Handle_Traits_Base_0
{
 static HANDLE InitValue() { return 0; }
};

struct Handle_Traits : public Handle_Traits_Base
{
 static BOOL Close(HANDLE h) { return ::CloseHandle(h); }
};

struct File_Traits : public Handle_Traits_Base
{
 static BOOL Close(HANDLE h) { return ::FindClose(h); }
};

struct Library_Traits : public Handle_Traits_Base_0
{
 static BOOL Close(HMODULE h) { return ::FreeLibrary(h); }
};


//...

template<typename T_Handle, typename TTraits>
    class CSmartHandleT
{
public:
        typedef TTraits traits_type;

        CSmartHandleT() :
            m_Handle(TTraits::InitValue())
        {
        }

         void Destroy() {
            if (!IsEmpty())
            {
                BOOL bRes = TTraits::Close(m_Handle);
                _ASSERTE(bRes);
                m_Handle = 0;
            }
        }
//...
};

 typedef CSmartHandleT<HANDLE, Handle_Traits> CHandle;
 typedef CSmartHandleT<HANDLE, FileFind_Traits> CFindHandle;
 typedef CSmartHandleT<HMODULE, Library_Traits> CLibHandle;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: RSDN handle library
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.06.04 09:52
Оценка: 3 (1)
Здравствуйте, Димчанский, Вы писали:

Д>Здравствуйте, Блудов Павел, Вы писали:

БП>>Там таких горбушек вагон и еще тележка. Надо новую версию закинуть.

Д>Закинете — дайте знать общественности. Plz


общественность — налетай
Re[2]: RSDN handle library
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 23.07.04 10:01
Оценка: +1
Здравствуйте, Дарней, Вы писали:

Д>У меня тоже есть обертка на хэндл. Функциональность у нее немного поменьше, но есть полезная фича — класс можно использовать с разными типами хэндлов (не только теми, которые требуют CloseHandle) — т.е. хэндлы FindFirstFile, GDI objects и т.п.

Д>Сам класс шаблонный, для разных видов хэндлов достаточно создать typedef

Д>Если интересно, могу кинуть почтой


А почему не выложить здесь на форуме?
- Искренне ваш, Поросенок Пафнутий
Re[5]: RSDN handle library - уточнение
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 23.07.04 17:19
Оценка: +1
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным начальным значением является INVALID_FILE_HANDLE...
- Искренне ваш, Поросенок Пафнутий
Название библиотеки
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 19.12.02 06:31
Оценка:
Очень вкусно выглядит! Спасибо! Но есть маленькое предложение — переименовать эту библиотеку в HTL (Handle Template Library). Будет единообразно с ATL и WTL.
- Искренне ваш, Поросенок Пафнутий
Re: Название библиотеки
От: Блудов Павел Россия  
Дата: 19.12.02 08:52
Оценка:
Поздно. Уже опубликовали. Впрочем, кто хочет, может сам себе переделать по вкусу и цвету.
ОчЕпЯтКа
От: adontz Грузия http://adontz.wordpress.com/
Дата: 19.12.02 17:06
Оценка:
У Владислава Чистякова очень странный мейл — http://www.rsdn.ru/Files/libs/audit@optim.ru
надо mailto: впереди ставить :)))
A journey of a thousand miles must begin with a single step © Lau Tsu
Спасибо
От: peterbes Россия  
Дата: 20.12.02 09:32
Оценка:
Спасибо, ребята. Пусть еще не OWL и не MFC, но начало есть. А дополнения Вы принимаете (как в GNU)?
Re: Спасибо
От: Блудов Павел Россия  
Дата: 20.12.02 10:53
Оценка:
Какого рода дополнения? (можно почтой)

Павел.
Круто !
От: Аноним  
Дата: 21.12.02 16:08
Оценка:
Я подкидывал идейку Adontz сделать это, он не послушал.

Весьма круто. Надо быстро заюзать и слать бугрепорты :)


Одно НО ! Где вы были ,когда .Net еще не было :)))
Re: RSDN handle library
От: Lexey Россия  
Дата: 29.03.04 10:09
Оценка:
Здравствуйте, Павел Блудов, Александр Корсуков, Владислав Чистяк, Вы писали:

Баги в CFile::MapViewOfFile и CFile::MapViewOfFileEx. Условие асерта должно быть обратным.
Re[2]: RSDN handle library
От: Lexey Россия  
Дата: 30.03.04 15:16
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Баги в CFile::MapViewOfFile и CFile::MapViewOfFileEx. Условие асерта должно быть обратным.


И еще неплохо было бы на View враппер написать, а то неполноценно как-то получается.
... << RSDN@Home 1.1.3 stable >>
Re: Круто !
От: c-smile Канада http://terrainformatica.com
Дата: 31.03.04 00:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я подкидывал идейку Adontz сделать это, он не послушал.


А>Весьма круто. Надо быстро заюзать и слать бугрепорты


А>Одно НО ! Где вы были ,когда .Net еще не было


Но Интернет то был?

Например: http://www.samblackburn.com/wfc/
Re[2]: RSDN handle library
От: Димчанский Литва http://dimchansky.github.io/
Дата: 08.06.04 08:58
Оценка:
Здравствуйте, Lexey, Вы писали:
L>Баги в CFile::MapViewOfFile и CFile::MapViewOfFileEx. Условие асерта должно быть обратным.

Не понял. Почему это?
Re[2]: RSDN handle library
От: Блудов Павел Россия  
Дата: 09.06.04 02:06
Оценка:
Здравствуйте, Lexey, Вы писали:

L>Баги в CFile::MapViewOfFile и CFile::MapViewOfFileEx. Условие асерта должно быть обратным.


Там таких горбушек вагон и еще тележка. Надо новую версию закинуть.

Павел.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: RSDN handle library
От: Димчанский Литва http://dimchansky.github.io/
Дата: 09.06.04 05:54
Оценка:
Здравствуйте, Блудов Павел, Вы писали:
БП>Там таких горбушек вагон и еще тележка. Надо новую версию закинуть.

Закинете — дайте знать общественности. Plz
Re[5]: RSDN handle library
От: Димчанский Литва http://dimchansky.github.io/
Дата: 09.06.04 09:58
Оценка:
Здравствуйте, Odi$$ey, Вы писали:
OE>общественность — налетай

Что, обновили уже?
Re[6]: RSDN handle library
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 09.06.04 10:05
Оценка:
Здравствуйте, Димчанский, Вы писали:

OE>>общественность — налетай

Д>Что, обновили уже?

ну, дык
Re[3]: RSDN handle library
От: Lexey Россия  
Дата: 09.06.04 15:05
Оценка:
Здравствуйте, Димчанский, Вы писали:

Д>Здравствуйте, Lexey, Вы писали:

L>>Баги в CFile::MapViewOfFile и CFile::MapViewOfFileEx. Условие асерта должно быть обратным.

Д>Не понял. Почему это?


По жизни. Может тебе уже новый вариант достался?
... << RSDN@Home 1.1.3 stable >>
Re: RSDN handle library
От: Дарней Россия  
Дата: 23.07.04 09:51
Оценка:
Здравствуйте, Павел Блудов, Александр Корсуков, Владислав Чистяк, Вы писали:

ПБА>Библиотека классов-оберток для объектов ядра windows.


День добрый!
У меня тоже есть обертка на хэндл. Функциональность у нее немного поменьше, но есть полезная фича — класс можно использовать с разными типами хэндлов (не только теми, которые требуют CloseHandle) — т.е. хэндлы FindFirstFile, GDI objects и т.п.
Сам класс шаблонный, для разных видов хэндлов достаточно создать typedef
Если интересно, могу кинуть почтой
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: RSDN handle library
От: Дарней Россия  
Дата: 23.07.04 12:10
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>А почему не выложить здесь на форуме?


и правда, почему бы и нет?

namespace Util {

    template<typename T_Handle, BOOL (WINAPI *CloseFun)(T_Handle)>
    class CSmartHandleT
    {
    public:
        CSmartHandleT() :
            m_Handle(0)
        {
        }

        explicit CSmartHandleT(T_Handle h)
            : m_Handle(h)
        {
        }

        ~CSmartHandleT() {
            Destroy();
        }

        T_Handle GetRaw() {
            return m_Handle;
        }

        bool IsEmpty() const {
                return 0 == m_Handle || T_Handle(-1) == m_Handle;
        }

        void Attach(T_Handle h) {
            Destroy();
            m_Handle = h;
        }
        
        T_Handle Detach() {
            T_Handle hTmp = m_Handle;
            m_Handle = 0;
            return hTmp;
        }

        void Destroy() {
            if (!IsEmpty())
            {
                BOOL bRes = (*CloseFun)(m_Handle);
                _ASSERTE(bRes);
                m_Handle = 0;
            }
        }
        
    private:
        CSmartHandleT(const CSmartHandleT&);
        CSmartHandleT& operator=(const CSmartHandleT&);
        
        T_Handle m_Handle;
    };

    typedef CSmartHandleT<HANDLE, CloseHandle> CHandle;
    typedef CSmartHandleT<HANDLE, FindClose> CFindHandle;
    typedef CSmartHandleT<HMODULE, FreeLibrary> CLibHandle;


операторы неявного приведения я не стал делать... нехорошо это, ИМХО
конструктор копирования и оператор присваивания тоже — за ненадобностью
список typedef можно расширять по своему вкусу и необходимости
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: RSDN handle library
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 23.07.04 12:47
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>
Д>namespace Util {

Д>    template<typename T_Handle, BOOL (WINAPI *CloseFun)(T_Handle)>
Д>    class CSmartHandleT
Д>    {
Д>    public:
Д>        CSmartHandleT() :
Д>            m_Handle(0)
Д>        {
Д>        }
...
Д>


ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным значением является INVALID_FILE_HANDLE...
- Искренне ваш, Поросенок Пафнутий
Re[6]: RSDN handle library - уточнение
От: Дарней Россия  
Дата: 26.07.04 04:12
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, SchweinDeBurg, Вы писали:


SDB>>ИМХО приятный код. Меня только одно смутило — для файловых хэндлов логичным начальным значением является INVALID_FILE_HANDLE...


э.... в первый раз слышу про такого зверя
м.б. INVALID_HANDLE_VALUE?
Просто разные функции API используют как "нулевое" значение 0 или -1 (AKA INVALID_HANDLE_VALUE), причем никакой системы тут мне обнаружить не удалось.
В любом случае — если хэндл не валиден, передавать его в функции АПИ не предполагается, так что его реальное значение никакой роли не играет.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: RSDN handle library
От: Дарней Россия  
Дата: 26.07.04 04:16
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Дарней, Вы писали:


__>Надеюсь вы не против критики


нет, конечно
вообще, идея хорошая. Так будет немного получше
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: RSDN handle library - уточнение
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 26.07.04 04:34
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>э.... в первый раз слышу про такого зверя

Д>м.б. INVALID_HANDLE_VALUE?

Сорри — облажался... Конечно — INVALID_HANDLE_VALUE.
- Искренне ваш, Поросенок Пафнутий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.