Иногда я получаю переменные lua непосредственно из интерпретатора из моего кода C ++, не связанного с swig, например
lua_getglobal( mpLuaState, varname );
double var = lua_tonumber(mpLuaState, -1);
lua_setglobal( mpLuaState, varname );
Когда я пытаюсь взять какой-то пользовательский объект с
void * = lua_touserdata(mpLuaState, -1);
Я понял, что SWIG оборачивает пользовательские объекты с помощью SWIG_NewPointerObj.
Есть ли способ получить значение указателя на мой пользовательский объект?
@ edit
У меня естьтолько что нашел решение этой проблемы.Я добавил метод в свой класс, экспортированный в lua с помощью Swig,
unsigned long GetPtr();
, который возвращает
return (unsigned long)this;
, а затемкогда я хочу взять его из кода C ++ (не относящегося к Swig, но только с указателем на Lua_state*
), запустите скрипт с
luaL_doString("ptrVal = MyObj:GetVal")
, а затем примите его как нормальное число иразберите его на void*
Это просто обходной путь, и я хотел бы сделать это правильно.Какие-либо предложения?