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

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

1

03.04.2007, 21:04

Pointer scope range

Ich hab ein banales Problem mit einer meiner Funktionen.
Sie soll neben dem Zeiger auf den DXDevice auch noch zwei Zeiger übernehmen, die sie dann füllt.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
void Init(LPDIRECT3DDEVICE9 pDev, LPDIRECT3DCUBETEXTURE9 pTex, LPD3DXMESH pMesh)
{
    
    HRESULT hResult;
    hResult = D3DXCreateCubeTextureFromFileEx(pDev, "EnvMap.dds", D3DX_DEFAULT, 1, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT, 0, NULL, NULL, &Tex);
    if(FAILED(hResult)){MessageBox(NULL, "Umgebungstextur konnte nicht geladen werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);}
    
    hResult = D3DXLoadMeshFromX("Modell.x", D3DXMESH_MANAGED, pDev, NULL, NULL, NULL, NULL, &pMesh);
    if(FAILED(hResult)){MessageBox(NULL, "Modell konnte nicht geladen werden", "Fehler", MB_OK | MB_ICONEXCLAMATION);}
}


In meiner WinMain() benutze ich dann die Funktion und übergebe ihr zwei Pointer. Intern werden die Pointer richtig geladen, aber sobald die Funktion verlassen wird, bleiben die Pointer, die ich übergeben hab, leer.

Das Problem hab ich erkannt, aber auf die Lösung komm ich nicht -.-

Mit freundlichen Grüßen,
WhiteMike

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

2

03.04.2007, 21:09

Die D3DX-Funktionen die du aufrufst setzen den Pointer auf den Bereich an dem die Textur/der Mesh dann liegt. Den Pointer den sie ändern ist aber nur eine Kopie des Pointers den du ausserhalb der Funktion hast (Call-by-value), deshalb ändert sich bei den Pointern ausserhalb der Funktion auch nichts. Du musst einen Zeiger auf den Zeiger auf die Textur/den Mesh übergeben (Call-by-reference), dann funktioniert es.
Also so:

C-/C++-Quelltext

1
void Init(LPDIRECT3DDEVICE9 pDev, LPDIRECT3DCUBETEXTURE9 *pTex, LPD3DXMESH *pMesh);
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

WhiteMike

Alter Hase

  • »WhiteMike« ist der Autor dieses Themas

Beiträge: 507

Wohnort: Ulm

Beruf: Schüler

  • Private Nachricht senden

3

03.04.2007, 21:42

Genau!

Danach hat es ausgesehen ... bloß bin ich mit den Zeigern durcheinandergekommen -.-

Vielen Dank!

Mit freundlichen Grüßen,
WhiteMike

Werbeanzeige