Hi!
Ich hab mal wieder ien kleines Problemchen.
Für mien Projekt benutze ich tbGUI, also die benutzeroberfläche der TRIBase engine, doch ich hab mehr Elemente gebraucht wie z.B. einen Knopf mit einem Bild. Also hab ich mir gedacht, erweitern wir sie einfach, doch da diese Knöpfe Spielspezifisch sind wollte ich sie nicht in die Engine mit einbaun, also hab ich mir gedahct, ich mach ne erweiterte GUI-Klasse, die ich von tbGUI ableite. und in diese Klasse schreib ich dann die neuen Erzeugungsmethoden. Die neuen Elemente leidte ich wie die "normalen" auch von tbGUIElement ab.
Das erzeugen, das hinzufügen und das zeichnen klicken,... Klappt alles, bloß nicht das löschen, Wenn ich eines meiner neuen Elemente löschen will kommt dieser fehler bei TB_SAFE_DELETE(pElement):
HEAP[Projekt Schneehase.exe]: Invalid Address specified to RtlValidateHeap( 00D80000, 00DAC178 )
Windows hat einen Haltepunkt in Projekt Schneehase.exe ausgelöst.
Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in Projekt Schneehase.exe oder in einer der geladenen DLLs hin.
Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.
ich habe keine ahnung was ich damit anfangen soll. Hier noch etwas Code:
Hier die Erzeugungsmethode:
|
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
|
// erstellt einen Knopf mit irgendeinem Bild
tbResult CExtendedGUI::CreatePictureButton(int iID,
int iPage,
tbVector2 vPosition,
tbVector2 vSize,
tbVector2 vTextLU,
tbVector2 vTextRD,
int iEffect)
{
tbGUIElement* pElement;
CPictureButton* pButton;
// Knopf erstellen
pElement = new CPictureButton;
// Daten eintragen
pElement->SetID(iID);
pElement->SetType(GET_GUIBUTTON);
pElement->SetPage(iPage);
pElement->SetGUI(this);
pElement->SetPosition(vPosition);
pElement->SetSize(vSize);
pElement->Show(TRUE);
pElement->Enable(TRUE);
pElement->SetEffect(iEffect);
// Liste erweitern
pElement = AddElement(pElement);
// Erstellungsnachricht verschicken
tbGUIMessage Msg;
ZeroMemory(&Msg, sizeof(tbGUIMessage));
Msg.Type = TB_GMT_CREATE;
PostMessage(iID, &Msg);
// Daten eintragen
pButton = (CPictureButton*)(pElement);
// Texturkoordinaten setzen
pButton->GetVertices()[V_LEFTDOWN].vTexture = tbVector2(vTextLU.x,vTextRD.y);
pButton->GetVertices()[V_LEFTUP].vTexture = vTextLU;
pButton->GetVertices()[V_RIGHTDOWN].vTexture = vTextRD;
pButton->GetVertices()[V_RIGHTUP].vTexture = tbVector2(vTextRD.x,vTextLU.y);
return TB_OK;
}
|
Und hier der löschvorgang:
// Löscht ein Element
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
tbResult tbGUI::DeleteElement(int iID)
{
// Element suchen
tbListEntry<tbGUIElement*>* pEntry = GetElementListEntry(iID);
if(!pEntry) TB_ERROR("Das Element wurde nicht gefunden!", TB_ERROR);
tbGUIElement* pElement = pEntry->Data;
// Löschungsnachricht schicken
tbGUIMessage Msg;
ZeroMemory(&Msg, sizeof(tbGUIMessage));
Msg.Type = TB_GMT_DELETE;
PostMessage(iID, &Msg);
// Das Element löschen
TB_SAFE_DELETE(pElement); <== hier kommt dieser Fehler
m_pElements->DeleteEntry(pEntry);
return TB_OK;
}
|
ich hoffe das irgendjemand ne ahnung hat.
mfg Dofter