JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=cd90fba659e5769040c34d3d461d18beMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

error C2440: 'return' : 'struct IDirectDrawSurface7 *'

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
B_R0ckZ
Mini JLI'ler



Anmeldedatum: 19.05.2003
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 27.05.2003, 20:32    Titel: error C2440: 'return' : 'struct IDirectDrawSurface7 *' Antworten mit Zitat

Hallo

Ich mache seit einiger Zeit C++ und habe mir das Buch gekauft(jetzt lerne ich Spieleprog..) Komme gans gut zurecht und hänge jetzt aber im Kapitel 19 Oberflächen un Sprites fest und zwar in meiner InitDirectdraw.h ich poste den Code mal hier rein und hoffe auf eure hilfe

Code:
LPDIRECTDRAW7        lpDD7           = NULL;
//LPDIRECTDRAWCLIPPER  lpDDClipper     = NULL;
LPDIRECTDRAWSURFACE7 lpDDSPrimary    = NULL;
LPDIRECTDRAWSURFACE7 lpDDSurface;
//BOOL bDDInitSuccess = FALSE;
DDSURFACEDESC2 SurfDesc;


BOOL  Error(char* msg);




BOOL InitDirectDraw(HWND hWnd)




{
    // DirectDrawObjekt anlegen   
    if(FAILED(DirectDrawCreateEx(NULL,(LPVOID*)&lpDD7,IID_IDirectDraw7,NULL)))
    { 
        return Error("Fehler beim Anlegen "
                     "des DirectDraw-Objekts");
    }

    // Kooperationsebene setzen
    if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)))

    {
        return Error("Fehler beim Setzen des Kooperationsebene");   
    }
   /* Display Mode ändern ? ;)
   if(FAILED(lpDD7->SetDisplayMode(640,480,32,0,0)))
   {
      return Error ("Nischts ;-)");
   }
   */

    // Struktur zur Beschreibung einer Oberfläche
    DDSURFACEDESC2 ddsd;

    // Initialisieren und Größe festlegen
    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
   
    // Die Angabe dwCaps soll berücksichtigt werden
    ddsd.dwFlags = DDSD_CAPS;
   
    // Es soll eine primäre Oberfläche angelegt werden
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
                         
    // Oberfläche anlegen
    if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
    {
        return Error("Fehler beim Anlegen der primären Oberfläche");
    }

    /* 2te Oberfläche---------------------------------------------------------
    ZeroMemory(&SurfDesc, sizeof(SurfDesc));
    SurfDesc.dwSize=sizeof(SurfDesc);

    //Caps,Höhe,Breite berücksichtigen

    SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;

    SurfDesc.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY ;
    //Wenn man nur im SYSTEM Speicher will dann DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY
    //Wenn man in AGp Speicher will dann DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_NONLOCALVIDMEM
    SurfDesc.dwWidth  = 100;
    SurfDesc.dwHeight = 100;

   if(FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
   {
      return Error ("Dicker Fehler in der 2ten");
   }

    -------------------------------------------------------------------------- */

    /* // Clipper anlegen
    if(FAILED(lpDD7->CreateClipper(NULL,&lpDDClipper,NULL)))
    {
        return Error("Fehler beim anlegen des Clipper");
    }

    // Clipper mit dem Fenster verbinden
    if(FAILED(lpDDClipper->SetHWnd(0,hWnd)))
    {
        return Error("Fehler bei SetHWnd");   
    }

    // Clipper mit der Oberfläche verbinden
    if(FAILED(lpDDSPrimary->SetClipper(lpDDClipper)))
    {
        return Error("Fehler beim Verbinden des Clippers");   
    } */

   /// 2te Oberfläche mit bild ---------------------------------------------------------
    LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPSTR File,int dWidth,int dHeight);


   {
      HDC hBmDC,hSurfDC;

      HBITMAP hBM;

      //DDSURFACEDESC2 SurfDesc;

      //LPDIRECTDRAWSURFACE7 lpDDSurface;

      hBM = (HBITMAP)LoadImage(0,"c:\\test.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE);

      if(NULL == hBM)
      {
         return NULL;
      }

      ZeroMemory(&SurfDesc, sizeof(SurfDesc));
        SurfDesc.dwSize=sizeof(SurfDesc);

        //Caps,Höhe,Breite berücksichtigen

        SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;

        SurfDesc.ddsCaps.dwCaps= DDSCAPS_OFFSCREENPLAIN;
        //Wenn man nur im SYSTEM Speicher will dann DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY
        //Wenn man in AGp Speicher will dann DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY | DDSCAPS_NONLOCALVIDMEM

      SurfDesc.dwWidth  = 100;
        SurfDesc.dwHeight = 100;

      if (FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
      {
         return NULL;
      }

      lpDDSurface->GetDC(&hSurfDC);

      hBmDC = CreateCompatibleDC(hSurfDC);

      SelectObject(hBmDC,hBM);
      BitBlt(hSurfDC,0,0,100,100,hBmDC,0,0,SRCCOPY);

      lpDDSurface->ReleaseDC(hSurfDC);

      DeleteObject(hBM);

        return lpDDSurface;
   


      

   }







    //--------------------------------------------------------------------------



 
    return TRUE;
}

// die Objekte wieder freigeben
void CleanUpDirectDraw(void)
{
    // Prüfen, ob die Zeiger gültigt sind und ggf. freigeben
    if(NULL != lpDDSPrimary)
    {
        lpDDSPrimary->Release();
        lpDDSPrimary = NULL;
    }
    /*if(NULL != lpDDClipper)
    {
        lpDDClipper->Release();
        lpDDClipper = NULL;
    } */
    if(NULL != lpDD7)
    {
        lpDD7->Release();
        lpDD7 = NULL;
    }
}

// Fehlermeldung ausgeben
BOOL Error(char* msg)
{
    // als MessageBox
    MessageBox(0,msg,"Error",MB_OK);
   
    // und in das Ausgabefenster
    OutputDebugString(msg);
    OutputDebugString("\n");
    return FALSE;
}





Nicht böse sein wenn es unleserlich ist Wink Hier bekomme ich mein Problem beim 2ten Oberfläche wenn ich den Zeiger mit return lpDDSurface auf die Oberfläche zurückgeben will kommt immer folgender Fehler

Code:

e:\programming\entwickulng\windows\direct draw\initdirectdraw.h(148) : error C2440: 'return' : 'struct IDirectDrawSurface7 *' kann nicht in 'int' konvertiert werden
        Diese Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat


Hoffe jemand findet meine Fehler habe jetzt 2 Stunden gesucht und nix gefunden bin halt noch Anfänger ....


Gruss Stefan
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 27.05.2003, 21:42    Titel: Antworten mit Zitat

Code:

LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPSTR File,int dWidth,int dHeight);  // <- da gehört in diesem Fall kein Semikolon hin,
                                                                                        da es kein Prototyp ist


Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
B_R0ckZ
Mini JLI'ler



Anmeldedatum: 19.05.2003
Beiträge: 2

Medaillen: Keine

BeitragVerfasst am: 28.05.2003, 05:27    Titel: Antworten mit Zitat

Anfängerfehler sorry und Vielen Dank !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum