EnumWindows und Funktionspointer funzt nicht



  • Hallo Zusammen

    Bin ein Java Programmierer und mache meine ersten schritte in c++ und winapi.
    Ich habe ein Programm geschrieben das mir alle Windows ausliest und den namen der windows herausschreibt.
    Nur leider bekomme ich eine Fehlermeldung beim kompelieren.

    Hier der sourcecode:

    // HEADER

    typedef void (*OUTPUT) (char*);
    
    class test  {
    public: 
    	static BOOL CALLBACK EWProc(HWND, LPARAM);  
    	test(OUTPUT*);  
    };
    
    class HxInit{
    public:
    	HxInit();
    	void push(char*);
    };
    
    int main() {
      HxInit init;
      return 0;
    }
    

    //body

    #include "windows.h"
    #include <iostream>
    #include "HxInit.hpp"
    
    BOOL CALLBACK test::EWProc(HWND hwnd, LPARAM lParam) {
    	char *text = 0; 
    	GetWindowText(hwnd,text,GetWindowTextLength(hwnd));
    	OUTPUT *out =  (OUTPUT*) lParam;
    	(*out)(text);
    	return true;
    }
    
    test::test(OUTPUT *out) {
      EnumWindows ( EWProc , (LPARAM) out);  
    }
    
    HxInit::HxInit()
    {  
    	test *t = new test(&HxInit::push); // hier ist der fehler
    	delete t;
    }
    
    void HxInit::push( char* text) {
    	std::cout<< text;
    }
    

    Der fehler lautet:

    error C2664: '__thiscall test::test(void (__cdecl ** )(char ))' : cannot convert parameter 1 from 'void (__thiscall HxInit::)(char *)' to 'void (__cdecl ** )(char *)'

    Kann mir einer sagen warum die Funktionsübergabe nicht funktionier!!!

    THX Sascha



  • Bin mir nicht sicher, aber evtl. müsstest du HxInit::push static machen 😕



  • Yep, der ctor erwartet eine non-member Funktion, es wurde jedoch eine member Funktion übergeben.



  • Das ist aber schei... Ich wollte doch eine funktion aufrufen einer klasse die auf klassenvariablen zugreift 😕 .

    Hab noch ne frage was ist in c++ das gleiche wie in java das interface oder abstracte classen. Kann ich eine Abstracte klasse auch in c++ machen?

    Ansonsten vielen dank dann muss ich das gamze wohl mit einer typedef struct lösen und dort eine class mit dieser function reinjassen..

    Thx Sascha



  • saschaappel schrieb:

    Kann ich eine Abstracte klasse auch in c++ machen?

    http://tutorial.schornboeck.net/pure_virtual.htm



  • saschaappel schrieb:

    Ansonsten vielen dank dann muss ich das gamze wohl mit einer typedef struct lösen und dort eine class mit dieser function reinjassen..

    Dafür gibt es bereits Lösungen, sowas wird weitläufig als Funktionsobjekt bezeichnet.


Anmelden zum Antworten