Funktion klappt nicht, Pointer Schuld?



  • Hallo, ich bekomms irgendwie nicht gebacken aaaaaaaaalso:

    IDirectDrawSurface7* Bild;
    
    Bild = /* Liefert IDirectDrawSurface7* zurück */ DDLoadBitmap(LPCSTR szBitmap, int dx, int dy);
    
    /* Jetzt hab ich eine Klasse und dort soll ein Pointer wiederum auf Bild zeigen*/
    
    [...]
    IDirectDrawSurface7 **texture;
    Konstruktor(IDirectDrawSurface7 *Bild){ texture  = &Bild; }
    

    Ist das so korrekt?
    Weil wenn ich die Adresse von Bild (&Bild) und das Ziel des Pointer texture (*texture) in eine Datei schreibe stehen dort unterschiedliche Werte 😞 ?



  • Ich kenn mich zwar nicht in DirectX aus. Aber IDirectDrawSurface7* ist so wie ich das sehe ein Pointer auf ein COM-Interface. Mit dem kannst du nicht "umgehen" wie in deinem Beispiel. 💡

    was genau ist übrigens

    Konstruktor(IDirectDrawSurface7 *Bild){ texture  = &Bild; }
    

    😕



  • Verkürzung von dem hier:

    class Klasse
    {
    IDirectDrawSurface7 **texture; 
    public:
    Klasse(IDirectDrawSurface7 *Bild){ texture  = &Bild; } 
    };
    

    Es muss defintiv gehen, denn

    IDirectDrawSurface7* Bild;
    IDirectDrawSurface7 **texture; 
    
    Bild = /* Liefert IDirectDrawSurface7* zurück */ DDLoadBitmap(LPCSTR szBitmap, int dx, int dy);
    
    texture  = &Bild;
    

    geht problemlos. Nur den Umweg über die Methode bekomme ich nicht hin...



  • Berghuette schrieb:

    Verkürzung von dem hier:

    IDirectDrawSurface7* Bild;
    IDirectDrawSurface7 **texture; 
    
    Bild = /* Liefert IDirectDrawSurface7* zurück */ DDLoadBitmap(LPCSTR szBitmap, int dx, int dy);
    
    texture  = &Bild;
    

    ich kenn ich jetzt auch nicht so mit dx aus, aber uebergibst du an DDLoadBitmap uninitialisierte, temporaere objekte ?

    was auch immer



  • Hallo,

    das kann so nicht funktionieren, denn mit &Bild im Konstruktor bekommt man die Adresse der Variablen Bild auf dem Stack, und die hat nun nichts mehr mit der Adresse zu tun, an der die übergebene Bild-Variable liegt. Was spricht dann eigentlich dagegen, den Konstruktor wie folgt zu definieren:

    class Klasse
    {
    IDirectDrawSurface7 **texture; 
    public:
    Klasse(IDirectDrawSurface7 **Bild){ texture  = Bild; } 
    };
    

    der Aufruf dann:

    IDirectDrawSurface7* Bild;
    
    Bild = /* Liefert IDirectDrawSurface7* zurück */ DDLoadBitmap(LPCSTR szBitmap, int dx, int dy);
    Klasse kl(&Bild);
    

    ?

    MfG



  • Wird gleich ausprobiert !

    Das Bild wird definitv geladen und befindet sich im VRAM



  • Juhu es geht *knuddel* 🙂

    Hab sogar verstanden warum *stolzist* 😉


Anmelden zum Antworten