Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.08.2008, 22:34

Probleme beim Beispielprogramm auf Seite 109/110

hi leute
Habe mir vor kurzem das Buch 3D-Spiele-Programmierung gekauft und finde es auch soweit ziemlich gut, aber als ich mich an dem Beispielprogramm mit den Adaptern auf Seite 109 versucht habe, bekomme ich ständig Probleme beim Verknüpfen des Programmes. Es lässt sich zwar problemlos kompilieren, aber beim Erstellen gibs Beschwerden.
Nun bin ich ziemlich ratlos, weil habs alle libs und include Verzeichnisse wie im Buch beschrieben bekannt gegeben und bei den Projekteigenschaften die Dateien TriBaseD.lib und TriBase.lib mit dem Linker bekannt gemacht.

Bekomme dennoch diese Fehlermeldungen:

Zitat


Kompilieren...
adapter.cpp
.\adapter.cpp(36) : warning C4996: 'sprintf' wurde als veraltet deklariert
C:\Programme\Microsoft Visual Studio 8\VC\include\StdIO.h(345): Siehe Deklaration von 'sprintf'
Meldung: "This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details."

Verknüpfen...
adapter.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z)".
adapter.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" struct IDirect3D9 * __stdcall Direct3DCreate9(unsigned int)" (?Direct3DCreate9@@$$J14YGPAUIDirect3D9@@I@Z)".
C:\Dokumente und Einstellungen\Fujitsu\Desktop\Programmieren\Neuer Ordner\hmm\Release\hmm.exe : fatal error LNK1120: 2 nicht aufgelöste externe Verweise.
Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Fujitsu\Desktop\Programmieren\Neuer Ordner\hmm\hmm\Release\BuildLog.htm" gespeichert.
hmm - 3 Fehler, 1 Warnung(en)



Und hier nochmal schnell meinen Quellcode:
(keine Ahnung obs was hilft weils sich eingtl ja kompilieren lässt aber trotzdem...)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <Windows.h>
#include <StdIO.h>
#include <D3D9.h>

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    PDIRECT3D9 pD3D=Direct3DCreate9(D3D_SDK_VERSION);
    if(!pD3D)
    {
        MessageBox(NULL,"Fehler beim Erzeugen!","Fehler!",MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }
    int inumadapters=pD3D->GetAdapterCount();
    D3DADAPTER_IDENTIFIER9 *padapters=new D3DADAPTER_IDENTIFIER9[inumadapters];
    for(int iadapter=0;iadapter<inumadapters;iadapter++)
    {
        if(FAILED(pD3D->GetAdapterIdentifier(iadapter,0,&padapters[iadapter])))
        {
            MessageBox(NULL,"Informationen konnten nicht abgefagt werden!!","Fehler!",MB_OK | MB_ICONEXCLAMATION);
            pD3D->Release();
            delete[] padapters;
            return 1;
        }
    
        char adapterinfo[1024];
        sprintf(adapterinfo,"Adapter-ID: %d\n"
                            "Name: %s\n"
                            "Treiber: %s\n"
                            "Treiberversion: %d",
                iadapter, 
                padapters[iadapter].Description,
                padapters[iadapter].Driver,
                padapters[iadapter].DriverVersion);
        MessageBox(NULL,adapterinfo,"Adapter gefunden!",MB_OK | MB_ICONEXCLAMATION);
    }
    pD3D->Release();
    delete[] padapters;
    return 1;
}


Achja.. Suche hab ich benutzt aber nichts gefunden was mir weitergeholfen hätte, bin also für jede Hilfe dankbar :)

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

25.08.2008, 13:48

du hast vergessen die benötigten libraries zu linken
um den fehler zu beheben musst du einfach unter Projekt->Eigenschaften:Konfugurationseigenschaften->Linker->Eingabe noch die DirectX Libraries einbinden (d3d9.lib und für D3DX auch noch die d3d9x.lib)
Du solltest ferner auch nochmal nachgucken ob du ein Win32 Projekt erstellt hast mit den benötigten Libraries

3

25.08.2008, 15:53

Für MessageBox haste die Library auch vergessen ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

4

25.08.2008, 19:18

Ok den ersten Fehler hab ich nun wegbekommen, es lag tatsächlich daran dass ich vergessen hatte d3d9.lib mit dem Linker bekannt zu machen (Könnte mir den Kopf gegen ne Wand hauen - Stand sogar noch im Buch und ich habs trotzdem vergessen...)

Was bleibt wäre noch der 2. Fehler mit der MessageBox

Zitat


adapter.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" int __stdcall MessageBoxA(struct HWND__ *,char const *,char const *,unsigned int)" (?MessageBoxA@@$$J216YGHPAUHWND__@@PBD1I@Z)".


Ich habe dass Projekt einfach als leeres Projekt erstellt, da man unter dem Win32 Abschnitt nur eine Win32-Konsolenanwendung erstellen kann keine "normales" Win32 Projekt. Könnte es daran liegen? Wenn nicht welche Libraries habe ich vergessen?


P.S ich hoffe ich nerve nicht zu sehr mit meinen dummen Fragen^^

5

25.08.2008, 19:29

binde mal diese libs noch mit ein: kernel32.lib, user32.lib, gdi32.lib

6

25.08.2008, 19:29

Hast du die user32.lib mitgelinkt?

@Bolle: Wir haben gleichzeitig gepostet, konnte nicht mehr löschen...

7

25.08.2008, 20:13

So nun funktionierts endlich :D
Hab alle 3 Libs miteingebunden und schon wurde das Projekt fehlerlos erstellt

Tausend Dank an alle^^

8

25.08.2008, 21:40

@ TrikkieMikkie

sowas soll vorkommen :lol:

9

20.10.2008, 20:52

Hallo Leute,
ich bin neu hier und habe auch gleich mal eine Frage.^^

Habe das Beispielprogramm eingetippt.
Dabei benutzt ich Microsoft Visual C++ 2008 Express Edition

Ich erhalte aber folgenden Fehler und weiß nicht wie der weg geht:

Zitat

error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [48]' in 'LPCWSTR' nicht möglich


Der Quelltext dazu sieht folgendermaßen aus:

Zitat

C-/C++-Quelltext

1
2
MessageBox(NULL, "Fehler beim Erzeugen der Direct3D-Schnitstelle!",
                      "Fehler", MB_OK | MB_ICONEXCLAMATION);


Würde mich über eine schnelle Antwort sehr freuen.

MfG

10

20.10.2008, 21:10

Schau mal in den Einstellungen unter Allgemein -> Zeichensatz und ändere mal in "Nicht festgelegt" oder "Unicode".

Werbeanzeige