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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

07.12.2010, 14:18

Listen richtig ausgeben

Hi

Ich wollte mit einer Liste die Adapter ausgeben. Zuerst wollte ich, dass alle Adapter die verfügbar sind in die Liste eingetragen werden. Danach habe ich mit dem Iterator alle Listeneinträge ausgeben wollen.

Leider funktioniert diese Ausgabe nicht richtig, es wird lediglich eine komische Buchstabenreihenfolge angezeigt.

Hier ist der 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// main.h
//
#include <iostream>
#include <list>
#include <d3d9.h>
#include <d3dx9.h>

#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

using namespace std;

void FillList(list<char*> * lList);
void ShowList(list<char*> lList);

// main.cpp
//
#include "main.h"

PDIRECT3D9 g_pD3D;

void FillList(list<char*> * lList)
{
    int                     iNumAdapters;
    char *          AdapterDescription;
    D3DADAPTER_IDENTIFIER9  AdapterInfo;

    // Anzahl der Adapter abfragen
    iNumAdapters = g_pD3D->GetAdapterCount();

    // Jeden Adapter durchgehen
    for(int iAdapter = 0; iAdapter < iNumAdapters; iAdapter++)
    {
        // Informationen abfragen
        g_pD3D->GetAdapterIdentifier(iAdapter, 0, &AdapterInfo);

        AdapterDescription = AdapterInfo.Description;

        lList->push_back(AdapterDescription);
    }
}

void ShowList(list<char*> lList)
{
    list<char*>::iterator i;

    for(i = lList.begin(); i != lList.end(); ++i)
    {
        cout << *i << endl;
    }
}

int main()
{
    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);

    list<char*> MyList;

    FillList(&MyList);

    ShowList(MyList);

    cout << MyList.size() << endl;

    return 0;
}


Kann mir jemand sagen, was ich hier falsch gemacht habe?

Meine zweite Frage, zuerst wollte ich das ganze auf einer Win32 Applikation machen und da wollte ich mit Hilfe von SendDlgItemMessage die verfügbaren Adapter mit dem Iterator auflisten. Doch die ComboBox hatte ebenfalls einen eigenartigen Inhalt. Wie kann ich den Iterator in LPARAM konventieren, damit die ComboBox den richtigen Inhalt ausgibt?

LG Patrick

Mastermind

unregistriert

2

07.12.2010, 14:36

Du speicherst einen Pointer auf ein Feld der AdapterInfo Struktur, die zum zeitpunkt der Ausgabe gar nicht mehr existiert. Schau dir mal strcpy an. Oder C++ strings for that matter.

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

07.12.2010, 16:14

Gib doch einfach schon in FillList die Adapter aus. Dann musst du auch nicht beim Auswählen später kompliziert die list durchsuchen (es sei denn du benutzt vector).
Und dann kannst du einfach nochmal g_pD3D->GetAdapterIdentifier(chosen, 0, &AdapterInfo) aufrufen... wobei chosen natürlich die auswahl ist.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

07.12.2010, 16:59

kleiner tipp am rande: bei ShowList(list<char*> lList); wird eine kopie übergeben. das ist sehr langsam. versuchs mal mit einer referenz auf const.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige