lua和c++的交互问题

wx376752150_1 2012-02-22 09:38:12
我需要在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();出错了,不知大家有何建议没?
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx376752150_1 2012-02-22
  • 打赏
  • 举报
回复

自己回复自己, 有刷分嫌疑饿,不过我是自己今天才想到的,不算刷吧~~
wx376752150 2012-02-22
  • 打赏
  • 举报
回复
我后来想想,只能这么做,在注册函数的得放,用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脚本中创建窗口,把窗口类返回给宿主

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧