В 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);
}
Надеюсь идея ясна, сделать класс управляемым не подходит
Здравствуйте, Ioann, Вы писали:
I>Надеюсь идея ясна, сделать класс управляемым не подходит
А делегаты только на управляемые методы вешаются...
ну сделай класс прослойку, у которого будет один метод — обработчик делегата, который будет дергать твой метод

... << RSDN@Home 1.2.0 alpha rev. 0>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Здравствуйте, Hacker_Delphi, Вы писали:
H_D>Здравствуйте, Ioann, Вы писали:
I>>Надеюсь идея ясна, сделать класс управляемым не подходит
H_D>А делегаты только на управляемые методы вешаются...
H_D>ну сделай класс прослойку, у которого будет один метод — обработчик делегата, который будет дергать твой метод
И никаких хаков еще не изобрели?
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);
};
};
Короче завал полный.. И вобще почему из управляемого кода неуправляемый можно сделать а наоборот нет (так бы в делегат можно было бы передать указатель на неуправляемую функцию-член)???