读书人

lua和c++的交互有关问题

发布时间: 2012-03-19 22:03:04 作者: rapoo

lua和c++的交互问题
我需要在c++中调用lua脚本中的函数,在c++中给lua脚本函数传递一个参数,希望在lua脚本函数中对该参数修改,并且在c++中的该变量的值也修改了,简单的说就是,在c++中的某个变量,希望可以在lua脚本中修改其值,并且在c++代码中可以得到该变化。(不用返回值)
例如:
lua脚本中
function f(a)
a = 10;
end

我想lua是不是可以往栈中压一个变量,这个变量是指向另外一个变量的地址,然后在这个脚本中修改这个变量指向的地址的值呢?

【备注:】
其实我是想在lua脚本中进行创建和修改图形界面(mfc),在自己做实验的时候
lua脚本如下:

function func_window(window)
x = window:DoModal()
return window
end

我在c++程序中把CWindow类型的参数传到lua的栈上,并且将m_pMainWnd 的值赋值为lua返回的值,结果界面显示了但是在程序退出的时候pThread->m_pMainWnd->DestroyWindow();出错了,不知大家有何建议没?


[解决办法]
我后来想想,只能这么做,在注册函数的得放,用memcpy把栈顶的内容完全拷贝到另外一个生命周期足够长的内存中去,可以是全局的,也可以是摸个类的静态成员,用malloc来预定内存。
比如
static int tolua_DoModal_W(lua_State* pState)
{
int isize1 = lua_gettop(pState);
CWindowDlg* pWnd = (CWindowDlg* )tolua_tousertype(pState, 1, 0);
if(NULL != pWnd)
{
pWnd->DoModal();
}
memcpy(spWnd, pWnd, sizeof(CWindowDlg));
int isize2 = lua_gettop(pState);
return 1;
}
static CWindowDlg* spWnd;


也可以直接在lua脚本中创建窗口,把窗口类返回给宿主

读书人网 >网络游戏

热点推荐