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

03.01.2004, 17:09

Programm stützt bei Listing 2.16 ab

Das Programm stürzt bei dieser Zeile mit einer Zugriffsverletzung ab:

Quellcode

1
    iNumModes = g_pD3D->GetAdapterModeCount(iAdapter, D3DFMT_R5G6B5);


Hier der gesamte Code:

Quellcode

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <windows.h>
#include <d3d9.h>
#include <stdio.h>

int                     g_iNumAdapters;
D3DADAPTER_IDENTIFIER9* g_pAdapters;
PDIRECT3D9              g_pD3D = NULL;
int                     iAdapter;

int WINAPI WinMain(HINSTANCE hInstace, HINSTANCE hPrevInstance, 
                   char* pcCmdLine, int iShowCmd)
{
    char acAdapterInfo[1024];

    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if (g_pD3D == NULL)
    {
        MessageBox (NULL, "Fehler beim Erzeugen der Direct3D-Schnittstelle!",
                    "Fehler", MB_OK | MB_ICONEXCLAMATION);

        return 1;
    }

    g_iNumAdapters = g_pD3D->GetAdapterCount();

    g_pAdapters = new D3DADAPTER_IDENTIFIER9[g_iNumAdapters];

    for (iAdapter = 0; iAdapter < g_iNumAdapters; iAdapter++)
    {
        if (FAILED(g_pD3D->GetAdapterIdentifier(iAdapter, 0,
                                                &g_pAdapters[iAdapter])))
        {
            MessageBox(NULL, "Adapterinformationen konnten nicht abgefragt werden!",
                        "Fehler", MB_OK | MB_ICONEXCLAMATION);

            g_pD3D->Release();
            delete[] g_pAdapters;
            return 1;
        }
        sprintf(acAdapterInfo, "Adapter-ID: %d\nName: %s\nTreiber: %s\nTreiberversion: %d",
                iAdapter, 
                g_pAdapters[iAdapter].Description,
                g_pAdapters[iAdapter].Driver,
                g_pAdapters[iAdapter].DriverVersion);
        MessageBox(NULL, acAdapterInfo, "Adapter gefunden", 
                    MB_OK | MB_ICONINFORMATION);
    }

    g_pD3D->Release();
    delete[] g_pAdapters;

    //Die Variable iAdapter enthält die ID des gerade aufgelisteten Adapters.

    int             iNumModes;
    D3DDISPLAYMODE* pModes;
    char            acModes[16384];

    //16 Bit verfügbar?
    iNumModes = g_pD3D->GetAdapterModeCount(iAdapter, D3DFMT_R5G6B5);

    if(iNumModes > 0)
    {
        //Speicherplatz reservieren
        pModes = new D3DDISPLAYMODE[iNumModes];
        strcpy(acModes, "");

        //JEden Modus durchgehen
        for (int iMode=0; iMode < iNumModes; iMode++)
        {
            //Infos
            g_pD3D->EnumAdapterModes(iAdapter, D3DFMT_R5G6B5, iMode,
                                    &pModes[iMode]);

            //Nummer, Breite, Höhe, und hz in String schreiben
            sprintf (acModes, "%s\nModus %d: %dx%d bei %d Hz (0: Standard)",
                acModes, iMode, pModes[iMode].Width,
                pModes[iMode].Height, pModes[iMode].RefreshRate);
        }

        //Display Modi
        MessageBox(NULL, acModes, "Verfügbare 16-Bit-Videomodi",
                    MB_OK |MB_ICONINFORMATION);

        delete[]  pModes;
    }

    return 0;
}


Wo liegt der Fehler?!
THX

2

03.01.2004, 19:02

*auf die Stirn hau* klar, erledigt ;)

3

03.01.2004, 19:47

Stimmt der Code jetzt? Irgendwas klappt mit iAdapter noch nicht, da kommt eine 1 raus, obwohl die for nur einmal durchgegangen wird... *müdeseideshalbesseinkanndassquatschred ;)*


Quellcode

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <windows.h>
#include <d3d9.h>
#include <stdio.h>

int                     g_iNumAdapters;
D3DADAPTER_IDENTIFIER9* g_pAdapters;
PDIRECT3D9              g_pD3D = NULL;
int                     iAdapter;


int WINAPI WinMain(HINSTANCE hInstace, HINSTANCE hPrevInstance, 
                   char* pcCmdLine, int iShowCmd)
{
    char acAdapterInfo[1024];

    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if (g_pD3D == NULL)
    {
        MessageBox (NULL, "Fehler beim Erzeugen der Direct3D-Schnittstelle!",
                    "Fehler", MB_OK | MB_ICONEXCLAMATION);

        return 1;
    }

    g_iNumAdapters = g_pD3D->GetAdapterCount();

    g_pAdapters = new D3DADAPTER_IDENTIFIER9[g_iNumAdapters];

    for (iAdapter = 0; iAdapter < g_iNumAdapters; iAdapter++)
    {
        if (FAILED(g_pD3D->GetAdapterIdentifier(iAdapter, 0,
                                                &g_pAdapters[iAdapter])))
        {
            MessageBox(NULL, "Adapterinformationen konnten nicht abgefragt werden!",
                        "Fehler", MB_OK | MB_ICONEXCLAMATION);

            g_pD3D->Release();
            delete[] g_pAdapters;
            MessageBox(NULL, "AUS!", "Verfügbare 16-Bit-Videomodi",
                    MB_OK |MB_ICONINFORMATION);
            return 1;
        }
        sprintf(acAdapterInfo, "Adapter-ID: %d\nName: %s\nTreiber: %s\nTreiberversion: %d",
                iAdapter, 
                g_pAdapters[iAdapter].Description,
                g_pAdapters[iAdapter].Driver,
                g_pAdapters[iAdapter].DriverVersion);
        MessageBox(NULL, acAdapterInfo, "Adapter gefunden", 
                    MB_OK | MB_ICONINFORMATION);
    }

    int                     iNumModes=5;
    D3DDISPLAYMODE*         pModes;
    char                    acModes[16384];

    iNumModes = g_pD3D->GetAdapterModeCount(iAdapter-1, D3DFMT_R5G6B5);

    if(iNumModes > 0)
    {
        //Speicherplatz reservieren
        pModes = new D3DDISPLAYMODE[iNumModes];
        strcpy(acModes, "");

        //JEden Modus durchgehen
        for (int iMode=0; iMode < iNumModes; iMode++)
        {
            //Infos
            g_pD3D->EnumAdapterModes(iAdapter, D3DFMT_R5G6B5, iMode,
                                    &pModes[iMode]);

            //Nummer, Breite, Höhe, und hz in String schreiben
            sprintf (acModes, "%s\nModus %d: %dx%d bei %d Hz (0: Standard)",
                acModes, iMode, pModes[iMode].Width,
                pModes[iMode].Height, pModes[iMode].RefreshRate);
        }

        //Display Modi
        MessageBox(NULL, acModes, "Verfügbare 16-Bit-Videomodi",
                    MB_OK |MB_ICONINFORMATION);
        delete [] pModes;   
    }

    g_pD3D->Release();
    delete[] g_pAdapters;

    return 0;
}

Werbeanzeige