JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Kapitel 19 Fehler in erstellen sekundären Oberfläche
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 15:28    Titel: Kapitel 19 Fehler in erstellen sekundären Oberfläche Antworten mit Zitat

Hallo zusammen

Ich habe einen Linkerfehler in meinem Programm von Kapitel 19 (Oberflächen und Sprites, Seite 321) und ich weiss nicht was zu tun ist Embarassed

ich habe als Basis das DirectDrawProgramm genommen, mit der Render()Funktion. Es initialisiert alles, dann macht es in der Winmain Funktion die primäre Oberfläche, den Clipper und dann woltle ich die sekundäre Oberfläche erstellen.

Nun gibt er mir aber den Fehler:

Code:
Linking...
Oberflaeche.obj : error LNK2001: unresolved external symbol _DirectDrawCreateEx@16
Oberflaeche.obj : error LNK2001: unresolved external symbol _IID_IDirectDraw7
Debug/Oberflaeche.exe : fatal error LNK1120: 2 unresolved externals


Was soll ich nur tun? Crying or Very sad *vonBrückeJump*

Der Code sollte richtig abgetippt sein. Hier der Codestart:


CPP:
#include <ddraw.h>

//anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE  hInstance);
//globale variable für das fensterhandle
HWND hWnd = 0;
//directdraw interface
LPDIRECTDRAW7 lpDD7 = NULL;
//oberflächen
LPDIRECTDRAWSURFACE7 lpDDSPrimary;
LPDIRECTDRAWSURFACE7 lpDDSurface;
//clipper
LPDIRECTDRAWCLIPPER lpDDClipper = NULL;
//struktur auf beschreibung von oberfläche
DDSURFACEDESC2 ddsd;

//sekundäre oberfläche
DDSURFACEDESC2 SurfDesc;


//callback funktion
LRESULT CALLBACK MessageHandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
//die objekte freigeben
void CleanUpDirectDraw(void);
//error funktion
int Error( char *msg );
//ddrawbeispiel
void Render(void);



//main funktion
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
   //fenster erzeugen und in handle speichern
   //directdrawobjekt erzeugen
   //kooperationsebene festlegen
   //struktur initialisieren
   //primäre oberfläche anlegen
   //clipper anlegen
   //clipper mit fenster verbinden
   //clipper mit oberfläche verbinden


   //SEKUNDÄRE OBERFLÄCHE ANLEGEN START

   //oberflächenbeschreibung initialisieren
   ZeroMemory(&SurfDesc, sizeof(SurfDesc));
   SurfDesc.dwSize = sizeof(SurfDesc);

   //caps, höhe und breite sollen berücksichtigt werden
   SurfDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;

   SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;

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

   //oberfläche anlegen
   if( FAILED( lpDD7->CreateSurface(&SurfDesc, &lpDDSurface,NULL)))
   {
         Error("Sek. Oberfläche anlegen ist fehlgeschlagen");
         return -1;
   }

_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 15:30    Titel: Antworten mit Zitat

libs gelinkt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 15:31    Titel: Antworten mit Zitat

Hi,

kleiner Tipp: geh mal oben in die Suchfunktion, gib dort unter Benutznamen "Patrick" ein, dann suchst du nach #pragma comment lib ddraw.lib Wink

Kurz: Du hast die Lib vergessen zu linken Smile
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 17:25    Titel: Antworten mit Zitat

Das kann ja nicht sein. Alle vorherigen Beispiele gingen problemlos! Dann hätte ich doch schon früher Probleme gehabt, nicht?

[Edit] Boah ich habt recht Very Happy Dachte das hätte ich gemacht. Danke!
_________________
Greetz CorDharel


Zuletzt bearbeitet von CorDharel am 30.06.2005, 17:39, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 17:28    Titel: Antworten mit Zitat

Wenn Du das tust was ich gesagt habe findest Du diesen Thread:
http://www.jliforum.de/board/viewtopic.php?t=3728&highlight=pragma

Dort steht dann dieser Code:
CPP:
    // Beispiel wo die dxguid.lib gelinkt wird
#pragma comment(lib, "dxguid.lib")


Wenn Du nun in Deinem Handbuch nachguckst steht drin das DirectDraw die ddraw.lib benötigt.

Die wird so gelinkt:
CPP:
#pragma comment(lib, "ddraw.lib")


Füge diese Zeile in Deinen Code ein und erledigt.

Tipp am Rande: Vergleiche die anderen Beispiele nie mit dem was Du grade hast.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 17:28    Titel: Antworten mit Zitat

doch kann sein. Im Buch stand net, dass wenn du den Code selber abtippst, folgende Zeilen einfügen musst:
CPP:
#pragma comment(lib, "ddraw.lib")


Gruß DirectXer

EDIT: Menno, Patty war schneller Crying or Very sad Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 17:41    Titel: Antworten mit Zitat

Hui es stimmt! Welch ein Segen über mich gekommen ist! Very Happy

Das heisst mit

Code:

#pragma comment(lib, "ddraw.lib")


Binde ich eine Lib, die ich noch nicht hatte, mit Code ein, statt sie immer über "Projects > Settings > blabla" zu definieren.

Richtig? Razz

BTW wer auch immer diesen Thread liest und ddraw.lib nun eingebunden hat: Vergiss dxguid.lib nicht!

(Juhui es funzt *freu* )
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 17:47    Titel: Antworten mit Zitat

richtig. Mit dem #pragma kann man die Lib denau so linken wie über den Weg im Buch; also überdie Projekteinstellungen. IMHO ists aber mit dem #pragma übersichtlicher, denn da sieht man direkt in einem Blick auf den COde, was alles gelinkt weird. Is aber Geschmackssache

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:05    Titel: Antworten mit Zitat

Da stimme ich dir zu. So ist es viel praktischer.
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:32    Titel: Antworten mit Zitat

Hmm jetzt hab ich das Problem dass ich das Bild nicht laden kann:

Code:
LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPSTR File, int dWidth, int dHeight)
{
   //device context für das bild und die oberfläche
   HDC hBmDC, hSurfDC;

   //handle der zu ladenden bitmap
   HBITMAP hBM;

   //oberflächenbeschreibung
   DDSURFACEDESC2 SurfDesc;

   //zeiger auf die oberfläche
   LPDIRECTDRAWSURFACE7 lpDDSurface;

   //bild laden
   hBM = (HBITMAP)LoadImage(0,File, IMAGE_BITMAP,dWidth,dHeight,LR_LOADFROMFILE);

   //ist ein fehler aufgetreten?
   if(NULL == hBM)
   {
      Error("Fehler 1");
      return NULL;
   }
......


Das gibt "Fehler 1".
Liegt das jetzt am Code oder am Bild? Ich habe ein Bild genommen (100*100), es zuerst als 24 Bit dann mit 16 Bit gespeichert (im MSPAINT) und es im G:\ abgelegt. die Funktion rufe ich so auf:

Code:
//sekundäre oberfläche laden
   lpDDSurface = CreateSurfaceFromBitmap("G:\britney.bmp",100,100);


Hmm vielleicht mag das Programm Britney Spears nicht Twisted Evil
_________________
Greetz CorDharel


Zuletzt bearbeitet von CorDharel am 30.06.2005, 18:34, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
philipp_boeing
JLI'ler


Alter: 34
Anmeldedatum: 26.07.2003
Beiträge: 188

Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:34    Titel: Antworten mit Zitat

CorDharel hat Folgendes geschrieben:
Hmm vielleicht mag das Programm Bitney Spears nicht Twisted Evil


könnt ich mir auch vorstellen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:34    Titel: Antworten mit Zitat

Du schreibst:
lpDDSurface = CreateSurfaceFromBitmap("G:\britney.bmp",100,100);

Das ist inkorrekt: wenn schon:
lpDDSurface = CreateSurfaceFromBitmap("G:/britney.bmp",100,100);
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:37    Titel: Antworten mit Zitat

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_4c34.asp
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
CorDharel
Junior JLI'ler



Anmeldedatum: 15.10.2002
Beiträge: 73
Wohnort: Winterthur, Zürich, CH
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:42    Titel: Antworten mit Zitat

Oh stimmt Very Happy Ich hab mich irreleiten lassen. im Buch steht nämlich

Code:

lpDDSurface = CreateSurfaceFromBitmap("G:\\britney.bmp",100,100);


jetzt funktioniert es schon zur Hälfte = es gibt keinen Fehler mehr aus Very Happy

Ich glaub ich weiss woran es liegt. Im Buch sieht der Aufruf so aus:

Code:
lpDDSPrimary->BltFast(10,10,lpDDSurface,NULL,DDBLT_WAIT,NULL);


aber der Compiler sagt, die Funktion BltFast nimmt keine 6 Parameter, so hab ich einfach mal einen gelöscht Rolling Eyes Smile

Code:
lpDDSPrimary->BltFast(10,10,lpDDSurface,NULL,DDBLT_WAIT);


und darum geht es jetzt wohl nicht Crying or Very sad
_________________
Greetz CorDharel
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 30.06.2005, 18:45    Titel: Antworten mit Zitat

müsste aber richtig sein. rufst du denn auch Flip auf?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
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