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

Delta

Frischling

  • »Delta« ist der Autor dieses Themas

Beiträge: 11

Wohnort: Österreich

  • Private Nachricht senden

1

22.12.2013, 02:54

Appcrash der Anwendung nach Testlauf.

Hallo und guten Morgen.
Nach einer längeren Suche im Forum habe ich diesbezüglich kein Thema gefunden darum wende ich mich hier her.
Sollte eines dafür existieren gerne Link posten oder ähnlichers.

Ich habe mit jetzt schon länger das Buch zugelegt und auch etwas eingelesen, das Verständnis was die Funktionen machen und was aufzurufen ist sind größtenteils bekannt.
Ich habe mich dann mit dem Buch befasst mit dem Abschnitt der Informationen der Grafikkarte auszulesen.

Der erste Abschnitt funktionierte ohne Probleme.
Als ich aber die im Buch vorgeschlagene Erweiterung einbaute, bekomme ich den Fehler nach dem ich auf den Ok-Button gedrückt habe.

Ich arbeite mit Visual Studio 2013 und habe soweit die Funktionen die als veraltet gegolten haben gegen die neuen ersetzt.

Allerdings bin ich überfragt warum mir das Programm mit der Meldung abstürzt das er die Daten im Speicher nicht schreiben und nicht auslesen konnte.

Hier der Sourcecode der cpp datei.

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
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
#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 der Direct3D-Schnitstelle", "Fehler", MB_OK | MB_ICONINFORMATION);
        
        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, "Adapterinformationen konnten nicht abgefragt werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);

            pD3D->Release();
            delete[] pAdapters;
            return 1;
        }
    

        const int charsize = 1024;
        char acAdapterInfo[charsize];
        sprintf_s(acAdapterInfo, charsize, "Adapter-ID: %d\n"
        "Name: %s\n"
        "Treiber: %s\n"
        "nTreiberversion: %d",

        iAdapter,
        pAdapters[iAdapter].Description,
        pAdapters[iAdapter].Driver,
        pAdapters[iAdapter].DriverVersion);

        MessageBox(NULL, acAdapterInfo, "Adapter gefunden", MB_OK | MB_ICONINFORMATION);

        int iNumModes = pD3D->GetAdapterModeCount(iAdapter, D3DFMT_R5G6B5);
        if (iNumModes > 0)
        {
            D3DDISPLAYMODE* pModes = new D3DDISPLAYMODE[iNumModes];
            //const int acmodesnum = 16384;
            char acModes[16384] = "";

            for (int iMode = 0; iMode < iNumModes; iMode++)
            {
                pD3D->EnumAdapterModes(iAdapter, D3DFMT_R5G6B5, iMode, &pModes[iMode]);

                sprintf_s(acModes, 16384, "%s\nModus: %dx%d bei %d Hz (0: Standard)", acModes, iMode, pModes[iMode].Width, pModes[iMode].Height, pModes[iMode].RefreshRate);

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

                delete[] pModes;
            }
        }
    }

    pD3D->Release();
    delete[] pAdapters;

    return 0;
}


Wenn ich dann das Programm unterbreche springt er mir auf Zeile 57 und im der IDE wird mir angezeigt das er die Werte nicht auslesen konnte?
Die geänderten Funktionen sind die sprintf in sprintf_s.
Liegt es daran das das Buch etwas älter ist und somit mit den neueren Anwendungen nicht kompatibel ist?
Was mich so gesehen wundern würde.

MFG Delta.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

22.12.2013, 07:16

Zeile 63: delete[] pModes;
Ich kann mir nicht vorstellen, dass dieser Code im Buch innerhalb der Schleife steht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Delta

Frischling

  • »Delta« ist der Autor dieses Themas

Beiträge: 11

Wohnort: Österreich

  • Private Nachricht senden

3

22.12.2013, 17:11

Hallo.
werde es nochmal genau überprüfen.

Danke dir erstmal


€dit: Da ist mir Tatsächlich die Schleife beim Formatieren nachträglich noch verrutscht.
Vielen Dank.

MFG

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Delta« (22.12.2013, 17:31)


Werbeanzeige