Giddion Skrevet 20. juli 2007 Del Skrevet 20. juli 2007 (endret) Jeg driver for tiden å roter litt med luaplus og prøver å få et enkelt program til å fungere Programmer skal registrere klassen CVector3 (3d posisjon) og få den til å fungere som en naturlig del av lua. Alt fungere fin fint, men av en eller annen merkelig grunn blir ikke __gc funksjonen kjørt når tabellen blir gcet (vet ikke helt om den blir gcet). Siden det ikke skjer så lekker jo programmet minne som en sil og det er jo litt dumt. kode: Klikk for å se/fjerne innholdet nedenfor #include <windows.h> #include "LuaPlus.h" using namespace LuaPlus; #include <math.h> #include <assert.h> #include <string> #include "vector3.h" int LuaGcVector3(LuaState* state) { delete (void*)state; //dette er vel muligen ikke riktig måte å gjøre det på, men poenget er at funksjonen ikke blir kjørt return 1; } int LuaCreateVector3(LuaState* state) { CVector3* pClass = new CVector3; LuaObject Tabel; Tabel.AssignNewTable(state); Tabel.SetLightUserData("__object", pClass); Tabel.SetMetaTable(state->GetGlobal("CVector3")); Tabel.Push(); return 1; } void LuaInitVector3(LuaState* state) { LuaObject mt = state->GetGlobals().CreateTable("CVector3"); LPCD::MetaTable_IntegratePropertySupport(mt); mt.SetObject("__index", mt); mt.Register("__call", &LuaCreateVector3); mt.Register("__gc", &LuaGcVector3); LPCD::PropertyCreate(mt, "x", &CVector3::x); LPCD::PropertyCreate(mt, "y", &CVector3::y); LPCD::PropertyCreate(mt, "z", &CVector3::z); mt.RegisterObjectDirect("Normalize", (CVector3*)0, &CVector3::Normalize); mt.SetMetaTable(mt); } int __cdecl main(int argc, char* argv[]) { _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF); LuaState* state = LuaState::Create(); LuaInitVector3(state); state->DoString("a = CVector3();"); state->DumpObject("@", "a", state->GetGlobal("a")); state->DoString("a = nil;"); state->GC(LUA_GCCOLLECT,100); LuaState::Destroy(state); _CrtDumpMemoryLeaks(); return 0; } På forhånd takk for alle svar Endret 20. juli 2007 av Giddion Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå