Problem bei Funktionszeigeruebergabe an DLL



  • Hallo,

    ich habe folgendes Problem und hoffe mir kann da jemand weiterhelfen:
    Also ich habe eine globale funktion namens ErstelleBitmap. Ist natuerlich nur ein kleines Beispiel von mir da meine richtige Funktion mit Parametern ist, aber ich hier die Funktionsweise nur verstehen will. Diese Funktion uebergebe ich als Funktionszeiger an einer DLL names AnzeigeTafel. Wenn ich nun den Debugmodus ausfuehre und sehen will ob meine Funktion betreten wird, sehe ich das die Funktion nie betreten wird. Header sind richtig eingebunden da ich das ganze ohne Fehler compilieren kann. Kann mir da jemand weiterhelfen, da ich auch so mit dlls und callbacks bisher nie was zu tun hatte. Der code ist folgender:

    // globale Funktion  (befindet sich global in der Implementation CMyMenu)
    ...
    BOOL ErstelleBitmap(); 
    {
     // hier kommt der code mit dem man ein Bitmap erstellen kann rein,
     // aber ich gelange nie in die Funktion rein :(
    
     return TRUE; 
    }
    
    // In CMyMenu wird der Funktionszeiger an der DLL uebergeben
    ...
    void CMyMenu::DoExecute()
    {
     ...
     AnzeigeTafel Tafel;
     Tafel.m_FuncPtr = ErstelleBitmap;
     Tafel.Erstelle();
     ...
    }
    
    // Die Dll sieht folgendermassen aus
    ...
    typedef BOOL (*_fPtr)(void);
    
    class __declspec(dllexport) AnzeigeTafel 
    {
    public:
     AnzeigeTafel();
     virtual ~AnzeigeTafel();
     void Erstelle();  // Von hier aus wird dann alles weitere  
                                      // erledigt
     _fPtr m_FuncPtr;
    };
    
    // Der Aufruf der globalen Funktion sieht so aus:
    ...
    void AnzeigeTafel::Erstelle()
    {
     m_FuncPtr();  // Aufruf der globalen Funktion
    }
    ...
    

    Fuer Hilfen bin ich dankbar.

    LG

    Micha



  • BOOL ErstelleBitmap(); //Das Semikolon ist Unsinn!
    {
     // hier kommt der code mit dem man ein Bitmap erstellen kann rein,
     // aber ich gelange nie in die Funktion rein :(
    
     return TRUE;
    }
    


  • Ups sorry hat sich beim posten miteingeschlichen natuerlich fehlt das in meinem
    Code. Ist denn der Rest sonst richtig ?



  • ja


Log in to reply