![JLI Spieleprogrammierung Foren-Übersicht](templates/subSilver/images/jlilogo.jpg) |
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 |
|
![](templates/subSilver/images/spacer.gif) |
Christian Rousselle Site Admin
![](http://www.jliforum.de/images/spiderman.png)
Alter: 48 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 |
|
![](templates/subSilver/images/spacer.gif) |
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 |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|