  | 
				
					JLI Spieleprogrammierung
    
					
					
				 | 
			 
		
	
 
		 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		B_R0ckZ Mini JLI'ler
 
 
  Anmeldedatum: 19.05.2003 Beiträge: 2
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 27.05.2003, 20:32    Titel: error C2440: 'return' : 'struct IDirectDrawSurface7 *' | 
				     | 
			 
			
				
  | 
			 
			
				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   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 | 
		 | 
	 
	
		  | 
	 
	
		Christian Rousselle Site Admin
  
  Alter: 49 Anmeldedatum: 19.07.2002 Beiträge: 1630
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 27.05.2003, 21:42    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	 
	
		  | 
	 
	
		B_R0ckZ Mini JLI'ler
 
 
  Anmeldedatum: 19.05.2003 Beiträge: 2
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 28.05.2003, 05:27    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Anfängerfehler sorry und Vielen Dank ! | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
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 
 |