On Dec 21, 2007 10:31 AM, Klaas Holwerda <[EMAIL PROTECTED]> wrote:
> Hi John,
>
> One of my last bindings is this, which always worked fine.
> I do not get any errors when building the bindings, but when the program
> start i
> get an error. See the stack dump down here.
> If i remove "%define_pointer a2dMaskProc", the RegisterBindings() fase is
> fine.
> The function a2dGetMaskProc() return the same pointer, and i tested a few
> script
> using that instead of a2dMaskProc itself, and they work.
> So i wonder what is going on. When i look at wxlObject->pObjPtr just before
> the
> call to lua_rawset, it contains the right info as far as i can see.
> It is not the only place i use %define_pointer e.g also in its base class.
> Is that maybe what luaO_rawequalObj sees as a problem??
> I think my bindings are oke, and something else is wrong :-)
> Can you give me some hints, or maybe even better, is this already enough for
> you
> to find an error in the binding generation?
>
> Regards
> and Happy Christmas to all of you.
>
> Klaas
>
> %class %delete %noclassinfo a2dCentralEditorCommandProcessor
> %endclass
>
> %define_string a2dMASKPROC_VERSION
>
> %class %delete %noclassinfo MaskprocLuaWrapper, a2dLuaWrapper
> MaskprocLuaWrapper( a2dCentralEditorCommandProcessor* commandProcessor )
> bool Exit()
>
> %define_pointer a2dMaskProc
>
> %endclass
>
> %function MaskprocLuaWrapper* a2dGetMaskProc()
>
>
> Here the stack dump.
>
> luaO_rawequalObj(const lua_TValue * 0x4d678191, const lua_TValue * 0x02005698)
> line 73 + 6 bytes
> luaH_get(Table * 0x02174a30, const lua_TValue * 0x02005698) line 484 + 16
> bytes
> luaH_set(lua_State * 0x020053a8, Table * 0x02174a30, const lua_TValue *
> 0x02005698) line 495 + 13 bytes
> lua_rawset(lua_State * 0x020053a8, int -3) line 673 + 37 bytes
> wxLuaBinding::DoRegisterBinding(const wxLuaState & {...}, int 1) line 1193 +
> 11
Find "a2dMaskProc" in the generated C++ code, it should be in a
wxLuaBindObject as { "a2dMaskProc", g_wxluatag_XXX, NULL, (const
void**)&a2dMaskProc }. Of course, you should be using %define_pointer
if and only if a2dMaskProc is declared in C++ as "MaskprocLuaWrapper*
a2dMaskProc;" and %define_object if this "MaskprocLuaWrapper
a2dMaskProc;".
If the above is not the problem, can you debug this code in
wxLuaBinding::DoRegisterBinding? I'm guessing the problem is in
wxluaT_pushusertag().
const wxLuaBindObject *wxlObject = m_objectArray;
for (n = 0; n < m_objectCount; ++n, ++wxlObject)
{
lua_pushstring(L, wxlObject->name);
if (wxlObject->objPtr != 0)
wxluaT_pushusertag(L, wxlObject->objPtr,
*wxlObject->wxluatype, true);
else
wxluaT_pushusertag(L, *wxlObject->pObjPtr,
*wxlObject->wxluatype, true);
lua_rawset(L, -3);
}
Hope this helps,
John
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
wxlua-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wxlua-users