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

Anonymous

unregistriert

1

30.11.2003, 17:52

Brutale, scheinbar grundlose Fehler

Hallo

Ich bin am Verzweifeln!
:crying: :crying: :crying: :crying: :crying: :crying:
Mein Programm, dass eigentlich nicht mehr macht, als eine Direct3D Schnittstelle zu erzeugen, wirft beim Beenden eine Exception.
In Visual C++ Ausgabe-Fenster habe ich folgende Fehlermeldungen:

Direct3D9: :====> EXIT: DLLMAIN(00f234b0): Process Attach: 00000108

Direct3D9: (INFO) :Direct3D9 Debug Runtime selected.

Direct3D9: :====> ENTER: DLLMAIN(00f234b0): Process Detach 00000108, tid=00000424

Direct3D9: (INFO) :MemFini!

Direct3D9: (ERROR) :Memory still allocated! Alloc count = 4

Direct3D9: (ERROR) :Current Process (pid) = 00000108

Direct3D9: (ERROR) :Memory Address: 0069413c lAllocID=1
dwSize=000047f8, ReturnAddr=00f232f6 (pid=00000108)

Direct3D9: (ERROR) :Memory Address: 0069a0b4 lAllocID=9 dwSize=00000c3c, ReturnAddr=00f1dc99 (pid=00000108)

Direct3D9: (ERROR) :Memory Address: 00692914 lAllocID=10 dwSize=00000008, ReturnAddr=00f1dd39 (pid=00000108)

Direct3D9: (ERROR) :Memory Address: 0069ad2c lAllocID=11 dwSize=00000400, ReturnAddr=00f22aa5 (pid=00000108)

Direct3D9: (ERROR) :Total Memory Unfreed From Current Process = 22588 bytes

Direct3D9: :====> EXIT: DLLMAIN(00f234b0): Process Detach 00000108
Thread 0x424 wurde mit Code 1 (0x1) beendet.

Das Programm "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Samuel\C++\Visual C++\DirectX\Direct3D\ProjectDirect3D\Debug\ProjectDirect3D.exe" wurde mit Code 1 (0x1) beendet.


Was bedeutet dass??
??? ??? ??? ??? ??? ???

Ich bitte um Hilfe!! :crying: :crying: :crying: :crying: :crying: :crying:

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

30.11.2003, 17:57

den fehler hatte ich bisher nur 1x und hab nie rausbekommen woran es lag, ich hab nach mehreren abenden das Handtuch geworfen, code gelöscht und neu geschrieben und dann kam er nie wieder ;)

Anonymous

unregistriert

3

30.11.2003, 18:16

Mag sein, aber

Schön schön, aber:
Was bedeuten eigentlich die Ausgaben, die Direct3D da macht??
??? ??? ??? ??? ??? ???

Es scheint wohl irgendwas mit dem Speicher zu tun zu haben...

Per Holzhammer kriegt man alles klein (Weisheit)...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

30.11.2003, 18:19

Den kompletten Quellcode zu posten wäre hilfreich!

Anonymous

unregistriert

5

30.11.2003, 18:32

Gern, das Problem hierbei wird sein, dass das Programm nicht mit der Tribase-Engine arbeitet, aber zwei selbst geschriebene DLL's verwendet,
(:) :) :) :)) deren Quellcode zu umfangreich wäre. Zur Info: CWindow ist abgeleitet von sgCWindow (einer selbstgeschriebenen Windows-Klasse), sgNewP und sgDeleteP sind Templates für Speicherarbeit (leider kann ich hier nicht alles aufzählen :rolleyes: :rolleyes: ) Trotzdem:

CWindowMain::CWindowMain(HINSTANCE hInstance)
:sgCWindow(hInstance)
{
m_pDirect3D=NULL;
m_pVertexBuffer=NULL;
m_pTexture=NULL;
m_pLight=NULL;
m_pModel=NULL;
m_pCamera=NULL;
}

CWindowMain::~CWindowMain(void)
{
}

void CWindowMain::OnCreate(void)
{
sgNewP(m_pDirect3D,new sgCDirect3D(m_HWnd));
}

void CWindowMain::OnKeyDown(int Key)
{
switch(Key)
{
case VK_ESCAPE:
Destroy();
break;
case VK_UP:
break;
case VK_DOWN:

break;
}
}

void CWindowMain::OnDestroy(void)
{
sgDeleteP(m_pDirect3D);
}

void CWindowMain::Render(void)
{

}

Es folgt der Quellcode von sgCDirect3D (nur wichtiges)...

sgCDirect3D::sgCDirect3D(const HWND hDeviceWindow)
{
m_hDeviceWindow=hDeviceWindow;
m_pDirect3D=NULL;
m_pDirect3DDevice=NULL;
ZeroMemory(&m_D3DCaps,sizeof(m_D3DCaps));

m_pDirect3D=PrivateCreateD3D();
if(!m_pDirect3D)
{
sgPrintError("sgCDirect3D::sgCDirect3D","CreateD3D schlug fehl!");
}
}

sgCDirect3D::sgCDirect3D(const sgCDirect3D& Direct3D)
{
m_hDeviceWindow=Direct3D.m_hDeviceWindow;
m_pDirect3D=Direct3D.m_pDirect3D;
m_pDirect3DDevice=Direct3D.m_pDirect3DDevice;
}

sgCDirect3D::~sgCDirect3D(void)
{
sgDeleteCOMObject(m_pDirect3D);
}


PDIRECT3D9 sgCDirect3D::PrivateCreateD3D(void)
{
PDIRECT3D9 Ret=Direct3DCreate9(D3D_SDK_VERSION);
if(!Ret)
{
sgPrintError("sgCDirect3D::CreateD3D","Direct3D-Objekt konnte nicht angelegt werden!\
(Wahrscheinlich ist nicht die neueste DirectX-Version installiert)");
}
return Ret;
}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

30.11.2003, 18:56

Bitte Code-Tag beim Schreiben des Beitrags benutzen!
Sonst kann man das ja keinem zumuten.
Ist sichergestellt, dass die Destruktoren auch wirklich aufgerufen werden?

Anonymous

unregistriert

7

30.11.2003, 19:20

Sorry

Sorry, aber das ist so mühsam : :rolleyes: :rolleyes:

Beim einfügen verschwinden die Tabulator-Einrückungen. Trotzdem:

Quellcode

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
CWindowMain::CWindowMain(HINSTANCE hInstance) 
  :sgCWindow(hInstance) 
{ 
  m_pDirect3D=NULL; 
  m_pVertexBuffer=NULL; 
  m_pTexture=NULL; 
  m_pLight=NULL; 
  m_pModel=NULL; 
  m_pCamera=NULL; 
} 

CWindowMain::~CWindowMain(void) 
{ 
} 

void CWindowMain::OnCreate(void) 
{ 
  sgNewP(m_pDirect3D,new sgCDirect3D(m_HWnd)); 
} 

void CWindowMain::OnKeyDown(int Key) 
{ 
  switch(Key) 
  { 
    case VK_ESCAPE: 
      Destroy(); 
    break; 
    case VK_UP:
 
    break; 
    case VK_DOWN: 

    break; 
  } 
} 

void CWindowMain::OnDestroy(void) 
{ 
  sgDeleteP(m_pDirect3D); 
} 

void CWindowMain::Render(void) 
{ 

} 

Es folgt der Quellcode von sgCDirect3D (nur wichtiges)... 

sgCDirect3D::sgCDirect3D(const HWND hDeviceWindow) 
{ 
  m_hDeviceWindow=hDeviceWindow; 
  m_pDirect3D=NULL; 
  m_pDirect3DDevice=NULL; 
  ZeroMemory(&m_D3DCaps,sizeof(m_D3DCaps)); 

  m_pDirect3D=PrivateCreateD3D(); 
  if(!m_pDirect3D) 
  { 
  sgPrintError("sgCDirect3D::sgCDirect3D","CreateD3D schlug fehl!"); 
  } 
} 

sgCDirect3D::sgCDirect3D(const sgCDirect3D& Direct3D) 
{ 
  m_hDeviceWindow=Direct3D.m_hDeviceWindow; 
  m_pDirect3D=Direct3D.m_pDirect3D; 
  m_pDirect3DDevice=Direct3D.m_pDirect3DDevice; 
} 

sgCDirect3D::~sgCDirect3D(void) 
{ 
  sgDeleteCOMObject(m_pDirect3D); 
} 


PDIRECT3D9 sgCDirect3D::PrivateCreateD3D(void) 
{ 
  PDIRECT3D9 Ret=Direct3DCreate9(D3D_SDK_VERSION); 
  if(!Ret) 
  { 
    sgPrintError("sgCDirect3D::CreateD3D",
      "Direct3D-Objekt konnte nicht angelegt werden!\ 
      (Wahrscheinlich ist nicht die neueste DirectX-Version installiert)"); 
  } 
  return Ret; 
}


PATRICK:
Bitte Code-Tags Benutzen ;) ist doch gaaanz easy :)

Maxi

Treue Seele

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

8

01.12.2003, 19:01

kann es sein, dass du PDIRECT3D9 nciht released? oder was macht sgDeleteCOMObject? Warum machst du das so? Ich mach das immer mit delete und release...

Ich hatte den Fehler auch shcon oft. Er kam bisher immer dann, wenn das Programm beendet wurde, wo D3D benutzt wird, aber IDirect3D9 noch nicht freigegeben wurde.
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Werbeanzeige