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

26.09.2011, 12:22

Probleme mit Listing 2.5

Hi erstmal

Hab folgendes Problem

Es werden keine Adapter gefunden da GetAdapterIdentifier den Wert (iNumAdapters -858993460 int) zurückliefert.
Finde aber den Fehler einfach nicht.
Hab das DirectX SDK im (Include und Lib) Verzeichnis eingebunden und die d3d9.lib gelinkt.
Fehlermeldung bekom ich keine.
Zum Code:

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
#include <Windows.h>
#include <stdio.h>
#include <d3d9.h>


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPervInstance, LPSTR pcCmdLine, int iShowCmd)
{
    PDIRECT3D9 pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if(!pD3D)
    {
        MessageBox(NULL, "Fehler beim Erzeugen der Direct3D-Schnittstelle!","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, "Adapterinformationen konnten nicht abgefragt werden","Fehler",MB_OK | MB_ICONEXCLAMATION);

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

        char acAdapterInfo[1024];
        sprintf(acAdapterInfo,
            "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);
    }

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

    return 0;
}

2

26.09.2011, 14:18

Erst mal Willkommen im Forum! ;)

GetAdapterCount gibt einen UINT zurück.
Möglicherweise ist das schon des Rätsels Lösung.
Sonst ist mir an dem Code nichts weiter aufgefallen.
fka tm

3

27.09.2011, 00:47

UINT gibt leider auch einen falschen Wert zurück : iNumAdapters 3435973836 unsigned int

Auch Google findet dafür keine Lösung bin anscheinend der einzige mit dem Problem.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

27.09.2011, 00:50

Dieser Wert ist hexadezimal 0xCCCCCCCC, was nach Fehlercode aussieht.
Ich glaube, da stimmt was anderes mit deinem Programm nicht. Obwohl es so kurz ist und ich nichts erkennen kann.
Funktionieren denn die Beispielprogramme?

5

27.09.2011, 01:33

Ja Beispielprogramme funktionieren alle.

6

27.09.2011, 08:26

Das liegt an der Abfrage via FAILED-Macro.
So klappts:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
UINT iNumAdapters = pD3D->GetAdapterCount();   

    D3DADAPTER_IDENTIFIER9 *pAdapters = new D3DADAPTER_IDENTIFIER9[iNumAdapters];

    for(UINT iAdapter = 0; iAdapter < iNumAdapters; iAdapter++)
    {
        hr = pD3D->GetAdapterIdentifier(iAdapter, 0, &pAdapters[iAdapter]);
        if (hr != D3D_OK)
        {
            MessageBox(NULL, "Adapterinformationen konnten nicht abgefragt werden","Fehler",MB_OK | MB_ICONEXCLAMATION);
fka tm

7

27.09.2011, 10:51

Sry für die Umstände wahr wiedermal ein richtig blöder Fehler meinerseits.

C-/C++-Quelltext

1
if(FAILED(pD3D->GetAdapterIdentifier(iAdapter,0,&pAdapters[iAdapter])));


Das ; am Ende der if Bedingung gehört da nicht hin.

Werbeanzeige