Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


AddRef, Release и QueryInterface - это члены класса IUnknown. Советую почитать про технологию COM - тогда станет понятней. Если не вызывать Release, то возможны проблемы с памятью, поэтому рекомендую сделать так:
Код: Выделить весь код
typedef struct ControlInterface
{
        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
            IUnknown * This,
            /* [in] */ REFIID riid,
            /* [iid_is][out] */ void **ppvObject);

        
        ULONG ( STDMETHODCALLTYPE *AddRef )( 
            IUnknown * This);
        
        ULONG ( STDMETHODCALLTYPE *Release )( 
            IUnknown * This);
        
   bool __stdcall (*f_check)(void *This);
   bool __stdcall (*f_user)(void *This, DWORD dwType, void* proc, DWORD User);
   bool __stdcall (*f_rem)(void *This, DWORD dwType, void* proc);
} *pControlInterface;

...

// попользовались
 interface->Release(my_class);
но если компилятор всё-же поддерживает виртуальные функции, то лучше не париться и сделать по-человечески:
Код: Выделить весь код
struct ControlInterface : IUnknown
{
   bool __stdcall f_check();
   bool __stdcall (DWORD dwType, void* proc, DWORD User);
   bool __stdcall (DWORD dwType, void* proc);
} *pControlInterface;

...

// попользовались
 interface->Release();

Отправлено: 10:11, 06-07-2009 | #7