Funktion aufrufen nach Casting --> Absturz



  • Hi,

    ich arbeite momentan an einem Klassenkonzept das jedoch noch nicht so ganz will...

    Aber erstmal code:

    __int32 __stdcall IUnknown::queryInterface (const IID &iid, void **ppvObject) 
    {
    	switch (iid)
    	{
    	case IID_IDirectGraphic:
    		*ppvObject = new (IDirectGraphic*);
    		((IDirectGraphic*)(*ppvObject))->initialize(); // Hier schmiert er ab.
    		break;
    	case IID_IDirectGraphic2:
    		*ppvObject = new (IDirectGraphic2*);
    		((IUnknown*)(*ppvObject))->initialize(); // ebenso hier schmiert er ab.
    		break;
    	}
    	return 0;
    }
    

    Die Funktion wird so aufgerufen:

    int main (void)
    {
    	IDirectGraphic *DG = NULL;
    	IDirectGraphic2 *DG2 = NULL;
    
    	DirectGraphicCreate (&DG);
    	DG->setMode (0);
    	DG->queryInterface (IID_IDirectGraphic2, (void**)&DG2);
    	DG->release ();
    
    	DG2->setMode (0);
    	DG2->release (); 
    
    	return 0;
    }
    

    Compilieren tut er fehler frei doch versuche ich ein Interface neu zu erstellen, gibts nen derben crash, wie kann ich dieses Problem beheben?



  • bugs schrieb:

    *ppvObject = new (IDirectGraphic*);
    

    Ändern in:

    *ppvObject = new IDirectGraphic;
    

    Durch die ganze herumcasterei hast du das Typechecking des Compilers effektiv ausgehebelt.



  • Hi,

    aso, das konnte ich natürlich nicht ahnen, wie müsste denn dann die zeile mit der initialisierungsfunktion aussehen? 😕



  • hat sich erledigt, man bin ich doof 😃


Anmelden zum Antworten