EDIT 2:
Solved!
As I couldn't compile luabind with gcc using bjam, I created a new static library project for Lua 5.1.4 and Luabind and it finally worked as it should.
I was using the installer version of Lua 5.14 for windows before, which was a dynamic library
and I guess it was messing with the static lib project for luabind I created previously.
But anyways, its working now.... Thanks o/
And nice tip Gambini, that helps a lot when debugging.
EndEdit2
Edit:
It really is the build of luabind.
I download VisualStudio and compiled luabind with:
"bjam toolset=msvc-10.0 variant=debug threading=multi link=static" -> This doesnt solve anything, the same result
and
"bjam toolset=msvc-10.0 variant=debug threading=multi link=static define=_BIND_TO_CURRENT_VCLIBS_VERSION" -> This makes it work.
The only problem is that I use gcc mingw with code::blocks so that doesn't actually solve it.
The define that solves the problem is specific to msvc.
just to make sure, now compiling luabind with gcc(gcc-mingw-4.4.1) with the define produces:
"bjam toolset=gcc variant=debug threading=multi link=static define=_BIND_TO_CURRENT_VCLIBS_VERSION" -> Bunch of undefined references to lua functions
"bjam toolset=gcc variant=debug threading=multi link=shared define=_BIND_TO_CURRENT_VCLIBS_VERSION" -> Luabind works but with .def_readwrite and .property not working still
Does anyone know how to properly compile luabind with gcc?
EndEdit:
I'm trying to make lua recognize a local variable in his global scope and makes chances in it.
So I'm creating a Test ts; and passing it to lua with luabind::globals(l)["test"] = &ts;
It works fine, lua makes changes to his variable 'test' and the changes are transferred to the local variable 'ts'.
The only problem is that the Property is not working: ".property("stack", &Test::getStack, &Test::setStack)"
When calling the getter it spills out some random numbers I'm assuming is an memory addres and the setter does nothing.
I notice thought that this doesnt happen when the variable is created inside luaString, only when getting a variable with luabind::globals.
Inside luaString: "t = Test()\n print(t.stack)" <- this works fine, just doesnt when variable from luabind::globals
This is not a major problem but it would be nice to know how to solve this... am I doing something wrong or am missign something?
The class
using namespace std;
class Test
{
private:
int stack;
public:
Test(){stack = 0; valor = 2;}
~Test(){}
void addStack(){stack++;}
void sayStack(){cout << stack << endl;}
int getStack(){return stack;}
void setStack(int stk){stack = stk;}
};
Example main and Lua code
int main()
{
lua_State* l = luaL_newstate();
luaL_openlibs(l);
luabind::open(l);
//Bind the class to lua
luabind::module(l) [
luabind::class_<Test>("Test")
.def( luabind::constructor<>( ) )
.def("sayStack", &Test::sayStack)
.def("addStack", &Test::addStack)
.property("stack", &Test::getStack, &Test::setStack)
];
//Create a Test class
Test ts;
//Make lua global test equal to local ts
luabind::globals(l)["test"] = &ts;
//First, make a new variable and test property, it WORKS
luaL_dostring(l,
"t = Test()\n"
"t.stack = 8\n"
"print(t.stack)\n"
);
//Then, using the variable grom luabind::globals... DOESN'T WORK.
luaL_dostring(l,
"print(ts.stack)\n"
"ts.stack = 8\n"
"print(ts.stack)\n"
);
//Close lua
lua_close(l);
return 0;
}
Thanks