Re: Вопрос про маршалинг
От: MortizW  
Дата: 22.05.06 18:44
Оценка: -1
К сожалению, никто не отктил, но решение я нашел такое :


class SafeIterfaceReleaser
{
    IUnknown* m_ptr;
public : 

    IUnknown** operator&()
    {
        return &m_ptr;
    }


    SafeIterfaceReleaser() 
        : m_ptr(NULL)
    {

    }

    bool operator !()
    {
        return (m_ptr == NULL);
    }

    SafeIterfaceReleaser(IUnknown* ptr) 
        : m_ptr(ptr)
    {
       
    }

    void Attach(IUnknown* ptr)
    {
        m_ptr = ptr;
    }

    IUnknown* GetPtr()
    {
        return  m_ptr;
    }


    ~SafeIterfaceReleaser()   
    {
        DWORD tid;
        HANDLE hndl = ::CreateThread(0, 0, thread_proc, m_ptr, 0, &tid);
        CloseHandle(hndl);
    }
private:

    static DWORD WINAPI thread_proc(LPVOID lpParameter)
    {
        if (!lpParameter)
            return 0;

        IUnknown* ptr 
            = reinterpret_cast<IUnknown*>(lpParameter);
        ATLASSERT(ptr);
        ptr->Release();
        return 0;
    }
};



освобождаем интерфейс в 3-м потоке и все работает
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.