Сообщений 8    Оценка 280        Оценить  
Система Orphus

Класс-обертка динамически связываемого указателя на функцию

Автор: Игорь Вартанов
Опубликовано: 07.02.2002
Исправлено: 13.03.2005
Версия текста: 1.0

Хэдер класса-шаблона
Демонстрационный проект

Да-да, я в очередной раз устал... Устал от динамической загрузки "ручками", от всех этих LoadLibrary(), FreeLibrary(), typedef и GetProcAddress()... Контроля за хэндлами и указателями и прочей мути, однообразной и надоедливой (типа необходимости тупо вспоминать, имя функции - это макрос на ..A и ..W, или оно по жизни такое, как я его помню)... Ну и вот...

class CDynaLinkResolver

Собственно интерфейс класса-шаблона незамысловат:

template <class T>
class CDynaLinkResolver  
{
protected:
    T         m_pRef;
    HINSTANCE m_hLib;

public:

    CDynaLinkResolver();   
    CDynaLinkResolver( LPCTSTR pszLib, LPCSTR pszName );    
    virtual ~CDynaLinkResolver();
    BOOL IsValid();
    BOOL Link( LPCTSTR pszLib, LPCSTR pszName );
    BOOL Unlink();
    HINSTANCE GetInstance();
    T Refer();
    T operator()();
};

ПРИМЕЧАНИЕ
Кстати, пока не представляю, как улучшить класс, чтобы исчез этот странный синтаксис вызова функции FuncName()(arg1, arg2,...) и FuncName.Refer()(arg1, arg2,...) . Tell me if You know how to cure.

... и несколько макросов к нему

В принципе, можно сказать, что они не нужны. Но мне все же показалось удобным пользоваться ими (думаю, время еще покажет). Хотя... Если помните, я в начале говорил о "проблеме" имен-макросов на ..A и ..W. Так вот применение этой четверки макросов позволяет эту проблему обойти (препроцессор поможет :-)).


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 8    Оценка 280        Оценить