H
Hi
zuerst mal vielen Dank für die Antwort
Wenn ich Deine Zeile
wrap->m_Delegate = gcnew CallbackDelegate(this, &Class::MyFunction);
verwende, erhalte ich den Fehler C3364: 'CallbackDelegate' : invalid argument for delegate constructor; delegate target needs to be a pointer to a member function
Im konkreten Fall befinde ich mich in einer unmanaged MFC Applikation (/clr nachträglich gesetzt).
Header der MFC Dialog Klasse CVS2005MFCAppDlg.h (Ausschnitt):
typedef System::Int32 (*CallbackPointer) (System::Int32);
delegate System::Int32 CallbackDelegate (System::Int32);
class CVS2005MFCAppDlg : public CDialog
{
public:
CVS2005MFCAppDlg(CWnd* pParent = NULL);
System::Int32 myEvhandler(System::Int32 i);//hier die gewünschte Callback, ist NICHT static
//usw. den Rest der CVS2005MFCAppDlg.h habe ich mal abgeschnitten
};
In CVS2005MFCAppDlg.cpp:
[StructLayoutAttribute( LayoutKind::Sequential, CharSet = CharSet::Ansi )]
public value class CallBackWrapper
{
public:
[MarshalAsAttribute(UnmanagedType::FunctionPtr)]
CallbackDelegate ^ m_Delegate;
};
//und hier die Implementierung der gewünschten Callback passender Signatur:
System::Int32 CVS2005MFCAppDlg::myEvhandler(System::Int32 i)
{
return 42;
}
//usw.
Und irgendwo dann, z.B. im OnInitDialog:
CallBackWrapper ^ wrap = gcnew CallBackWrapper();
CallbackPointer cbPointer;
wrap->m_Delegate = gcnew CallbackDelegate(this, &CVS2005MFCAppDlg::myEvhandler);//hier Fehler
Dann erhalte ich den o.g. Fehler
Vermutlich geht es doch nur mit statischen Klassen, oder?
Gruss,
Holger