callback funktion frage:



  • Hallo Leute ich hab ne Klasse mit einer callback funktion:

    class CPr2_Connection
    {
    	public:
    	static int CALLBACK OnRecord(void *p);
    	//static DWORD WINAPI ThreadEntry (void *pArg);
    
    	CPr2_Connection(); 
    	void SendData(){
    
    		printf("%i", CPr2_Connection::OnRecord("TEST"));
    	}
    	~CPr2_Connection(void);
    };
    

    wenn ich nun "SendDAta" aufrufe, so die OnRecord Funktion aufgerufen werden.. (was auch klappt).

    Wenn aber nun die OnRecord funktion nicht implementiert ist.. komm der fehler

    PR2Connection error LNK2019: unresolved external symbol "public: static int

    __stdcall CPr2_Connection::OnRecord(void *)" (?OnRecord@CPr2_Connection@@SGHPAX@Z) referenced in function "public: void __thiscall CPr2_Connection::SendData(void)" (?SendData@CPr2_Connection@@QAEXXZ)
    

    was mir auch klar ist.. er kann den funktionrumpf nich finden..

    aber wie kann ich es machen, das er die funktion einfach nich ausführt wenn sie nicht implementiert ist?



  • aber wie kann ich es machen, das er die funktion einfach nich ausführt wenn sie nicht implementiert ist?

    Keine Angst, dafür sorgt der Kompiler und der Linker: Wenn die Methode nicht implementiert ist und Du sie aufrufen willst, sagts dir der Kompiler/Linker.



  • Das geht so nicht, wie du willst. Wenn du deine funktion definierst so wie du, musst du sie auch implmentieren, wenn du sie irgendwo im code benutzt.

    DAs ist übrigens auch keine callback-funktion. Als callback-funktion wäre ein Funktionszeiger das richtige (is aber veraltet, lieber funktoren benutzen etc.). diesen kannst du dann auf NULL testen, und somit gucken, ob du eine callback-funktion aufrufen sollst, oder nicht.



  • @Maxi: hmm ok, kannst du mir evlt. ein beispiel machen



  • #include <iostream>
    using namespace std;
    
    class CPr2_Connection 
    {
    	public:
    		typedef int (*MyCallback)(void* p);
    
    		MyCallback callback;
    
    		CPr2_Connection(MyCallback cb)
    		: callback(cb)
    		{
    		}
    
    		void SendData()
    		{
    			if(callback!=0)
    				cout << callback((void*)"TEST");
    		}
    };
    
    int Test(void* p)
    {
    	cout << "Callback";
    
    	return 123;
    }
    
    int main()
    {
    
    	CPr2_Connection s1(0);
    	s1.SendData();
    
    	CPr2_Connection s2(&::Test);
    	s2.SendData();
    }
    


  • wow, genau das hab ich gesaucht, ich danke dir;) grüße


Anmelden zum Antworten