invalid argument for delegate constructor
От: Ioann  
Дата: 10.03.06 01:27
Оценка:
В ref классе работает, а так выдает ошибку

error C3364: 'System::Windows::Forms::PaintEventHandler' : invalid argument for delegate constructor; delegate target needs to be a pointer to a member function

class CNetInitWnd
{
public:
            ..............

    CNetInitWnd(Form^ frm,CNetInitWnd* obj);
    virtual ~CNetInitWnd();

    gcroot<Form^> m_frmNETForm;

             .............

    void mfRender(Object^  sender,PaintEventArgs^  e)
    {
            Render();
            m_frmNETForm->Invalidate();
            SwapBuffers(m_hDC);
    };
}


//-- реализация конструктора
CNetInitWnd::CNetInitWnd(Form frm,CNetInitWnd* obj)
{

    m_frmNETForm = frm;

    frm->Paint  += gcnew PaintEventHandler(this, &CNetInitWnd::mfRender);

}

Надеюсь идея ясна, сделать класс управляемым не подходит
Re: invalid argument for delegate constructor
От: Hacker_Delphi Россия  
Дата: 10.03.06 04:34
Оценка:
Здравствуйте, Ioann, Вы писали:

I>Надеюсь идея ясна, сделать класс управляемым не подходит


А делегаты только на управляемые методы вешаются...
ну сделай класс прослойку, у которого будет один метод — обработчик делегата, который будет дергать твой метод
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[2]: invalid argument for delegate constructor
От: Ioann  
Дата: 10.03.06 10:19
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

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


I>>Надеюсь идея ясна, сделать класс управляемым не подходит


H_D>А делегаты только на управляемые методы вешаются...

H_D>ну сделай класс прослойку, у которого будет один метод — обработчик делегата, который будет дергать твой метод

И никаких хаков еще не изобрели?
Re[3]: что то я никак не могу придумать врапер для моей ситу
От: Ioann  
Дата: 10.03.06 12:36
Оценка:
ref class CWrapper
{
public:

    void mfRender(Object^  sender,PaintEventArgs^  e)
    {
        
    };
};

CNetInitWnd::CNetInitWnd(gcroot<Form^> frm,CNetInitWnd* obj)
{
    m_frmNETForm = frm;

    CWrapper an;
    frm->Paint  += gcnew PaintEventHandler(%an, &CWrapper::mfRender);

}


но тут проблема CWrapper::mfRender не видит не члены из CNetInitWnd(а этот класс ко всему является базовым для других), друзья в манагеде не могут быть

а если так то идет цепная реакция по превращению класса в сплошной статик
ref class CWrapper
{
public:

    void mfRender(Object^  sender,PaintEventArgs^  e)
    {
        CNetInitWnd::mfRender(sender,e);
    };
};


Короче завал полный.. И вобще почему из управляемого кода неуправляемый можно сделать а наоборот нет (так бы в делегат можно было бы передать указатель на неуправляемую функцию-член)???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.