Pointer auf MessageFunktion

Moin ,

Mein Problem hat folgende Vorraussetzung:
MFC Visual C++

Ich habe eine geraet.dll, dort kann ich eine MessageHandler Funktion registrieren mit

PointerToMessageHandler = registerHandler(PointerToMessageHandler);

dazu habe Ich eine Funktion einmal Global

void MyGlobalMessageFunktion ( CGearteMessage Message,CString szMessage);

und eine Funktion In der Classe ,die wo ich den MessageHandler 'Registriere.

void Classe::MyMessageFunktion ( CGearteMessage Message,CString szMessage);

Vorgabe ist

typedef void(\*PointerToMessageHandler)(CGearteMessage Message,CString szMessage)

Jetzt das Problem
wenn ich beim Registrienen die Memberfunktion Classe::MyMessageFunktion zu registrieren.
also

PointerToMessageHandler = registerHandler(&MyMessageFunktion);

gibt es einen Error C2276 ‚&‘ ungültige Operation auf Ausdruck einer gebundenen MemberFunktion

kein Problem ist wenn ich die Globale Funktion nehme.

PointerToMessageHandler = registerHandler(&MyGlobalMessageFunktion);
  1. Frage , kann ich irgentwie ein Pointer auf die Memberfuntkion bekommen.

  2. Wenn denn nur die Globale Funktion geht, wie komm ich wieder an meine Classe innerhalb meiner Globalen Funktion.
    versucht hab ich folgendes :

    CproCheckApp* pApp = (CproCheckApp*) AfxGetApp();
    CFrameWnd* pWnd= (CFrameWnd*)pApp->m_pMainWnd;
    CproCheckDoc* pDoc = (CproCheckDoc*) pWnd->GetActiveDocument();
    CDeviceCtrl* pdCtrl = &pDoc->m_MessCtrl.m_CDeviceCtrl;

gibt ein Assertion fault bei pDoc :frowning:

wenn 1. nicht Lösbar dann 2.

hilfe büdde *ganz lieb schaut*

Hiho,

erstmal folgendes Beispiel:

class Sample
{
public:
 int a (int) { return 0x13; }
};

void b () {}

int
main ()
{
 Sample s;
// Elementzeiger
 int (Sample::\* t) (int) = &Sample::a;
// Aufruf entweder so, immer mit einem passenden Objekt
 return (s.\*t) (0);
// oder so, wenn du einen Zeiger auf ein Objekt hast
// return (&s-\>\*t) (1);
// ohne Elementzeiger
// return s.a (0);
// Funktionszeiger
 void (\*u) () = &b;
// Aufruf
 u ();
}

wenn du eine Funktion so registrieren willst, dann kannst du nur eine globale Funktion nehmen (weil du kein Objekt angeben kannst, das mit dem Elementzeiger aufgerufen werden kann).
In dem Fall brauchst du wahrscheinlich eine globale Variable, die das Objekt hält und eine globale (oder statische Elementfunktion), die das globale Objekt benutzt.

Ich hoffe, das nützt dir was, da ich von VC++ nicht viel weiß.

mfg TLF

Moin

Ich hoffe, das nützt dir was, da ich von VC++ nicht viel weiß.

mfg TLF

Hat geholfen. Jetzt werd ich halt eine Message bei der MFC registrieren und über die globale finktion senden .

Danke