Problema con punteros en luabind

Agrupa todas las consultas sobre los lenguajes de programacion como C, C++, Python, Java ...

Problema con punteros en luabind

Notapor carlostex » Mié Jul 14, 2010 6:03 am

Que tal, Pues les traigo una duda que intente resolver pero por mas que hice no funcionó, primero el codigo:
Código: Seleccionar todo
#include <luabind/luabind.hpp>
#include <luabind/adopt_policy.hpp>
#include<iostream>
using namespace std;

extern "C" {
   #include "lua.h"
   #include "lualib.h"
   #include "lauxlib.h"
}

void pt(int *p)
{
   cout<<*p<<endl;
}


class nume
{
   
   public:
   int *n;
   nume(){};
   void set(int i){n=new int; *n=i;}
   int *get(){return n;}
   
};

int  main(int argc,char* argv[]) {
   
   
   
// Create a new lua state
   lua_State *L = lua_open();

  // Connect LuaBind to this lua state
   luabind::open(L);
   luaL_openlibs(L);//load basic libs

   using namespace luabind;
      
   module(L)
   [
      def("pt", &pt)
   ];     
   
   module(L)
    [
         class_<nume>("nume")
         .def(constructor<>())
         .property("n",&nume::set, &nume::get,luabind::detail::null_type(), adopt(result))
   ];
   
   
   luaL_dostring(
   L,
   "a=nume()\n"
   "a:set(2)\n"
    "print(2)\n"
   );


   lua_close(L);


}


Comando para compilar: g++ -I ./ -I/usr/local/include -I/usr/include/lua5.1 -lluabind -llua5.1 -ldl -o test test.cpp

OK, bueno pues se supone que lo que debe hacer es devolverme un apuntador a un entero de c++, y que dentro le lua lo pueda volver a enviar a una funcion de c++, pero no funciona, Cuando llamo a a:set(2) no se ejecuta el script por que tiene un error, Si lo quito ya se ejecuta.

Hay poca documentacion de esto en la web y por eso me ha costado trabajo, ya logre exportar funciones y clases, y lo pude ejecutar bien, pero nececito los apuntadores, espero que alguien sepa del tema.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Notapor Juanxo » Jue Jul 15, 2010 6:23 pm

buenas carlos
estoy investigando el error, pero aun no lo encuentro.
para sacar mayor informacion de porque es este error, prueba a añadir un try..catch y ver que te dice:

Código: Seleccionar todo
try  {
30.    ResourceManager MyResourceManager;
31.
32.    // Assign MyResourceManager to a global in lua
33.    luabind::globals(myLuaState)["MyResourceManager"] = &MyResourceManager;
34.
35.    // Execute a script to load some resources
36.    luaL_dostring(
37.      myLuaState,
38.      "MyResourceManager:loadResource(\"abc.res\")\n"
39.      "MyResourceManager:loadResource(\"xyz.res\")\n"
40.      "\n"
41.      "ResourceCount = MyResourceManager.ResourceCount\n"
42.    );
43.
44.    // Read a global from the lua script
45.    size_t ResourceCount = luabind::object_cast<size_t>(
46.      luabind::globals(myLuaState)["ResourceCount"]
47.    );
48.    cout << ResourceCount << endl;
49.  }
50.  catch(const std::exception &TheError) {
51.    cerr << TheError.what() << endl;
52.  }
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor carlostex » Vie Jul 16, 2010 6:29 am

OK, muchas gracias, ya vere que sucede.
saludos
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico


Volver a Sobre lenguajes de programación

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron