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.