test02
2010-02-06 18:01
197 查看
HSQOBJECT *po = 0; // 用于保存 callback 函数(脚本函数对象)
// 调用脚本回调函数(并释放)
int doCallback(HSQUIRRELVM v)
{
if(po!=0) {
// 如果closure已经注册,那么将其压入堆栈
sq_pushobject(v, *po);
// 压入roottable作为closure执行“上下文”
sq_pushroottable(v);
// 发起调用(SQFalse,SQFalse表示不返回值,且不引发脚本异常)
if(SQ_FAILED(sq_call(v, 1, SQFalse, SQFalse))) {
printf("回调函数调用失败\n");
}
// 无论closure调用是否成功,closure本身仍然在栈上,因此弹出
sq_poptop(v);
// 减少closure的引用计数(解除C++对该closure的引用)
sq_release(v, po);
delete po;
po = 0;
}
return 0;
}
// 注册回调函数
int setCallback(HSQUIRRELVM v)
{
//printf("C::setCallback() top:%d toptype: %d\n", sq_gettop(v), sq_gettype(v, 2));
po = new HSQOBJECT;
// setCallback被调用时,第一参数是roottable,第二参数是一个closure回调(这里简单起见不做任何检查)
if (SQ_SUCCEEDED(sq_getstackobj(v, 2, po)))
{
// 增加po的引用计数,使其不会由于没有脚本对po的引用而被回收
sq_addref(v, po);
}
return 0;
}
// 调用脚本回调函数(并释放)
int doCallback(HSQUIRRELVM v)
{
if(po!=0) {
// 如果closure已经注册,那么将其压入堆栈
sq_pushobject(v, *po);
// 压入roottable作为closure执行“上下文”
sq_pushroottable(v);
// 发起调用(SQFalse,SQFalse表示不返回值,且不引发脚本异常)
if(SQ_FAILED(sq_call(v, 1, SQFalse, SQFalse))) {
printf("回调函数调用失败\n");
}
// 无论closure调用是否成功,closure本身仍然在栈上,因此弹出
sq_poptop(v);
// 减少closure的引用计数(解除C++对该closure的引用)
sq_release(v, po);
delete po;
po = 0;
}
return 0;
}
// 注册回调函数
int setCallback(HSQUIRRELVM v)
{
//printf("C::setCallback() top:%d toptype: %d\n", sq_gettop(v), sq_gettype(v, 2));
po = new HSQOBJECT;
// setCallback被调用时,第一参数是roottable,第二参数是一个closure回调(这里简单起见不做任何检查)
if (SQ_SUCCEEDED(sq_getstackobj(v, 2, po)))
{
// 增加po的引用计数,使其不会由于没有脚本对po的引用而被回收
sq_addref(v, po);
}
return 0;
}
相关文章推荐
- ES权威指南_04_aggs_02 Aggs Test-Drive(学习方法:测试驱动)
- [Java] 网络-02 TestSockClient / TestSockServer / 学生作品 : talkclient / talkserver
- No enclosing instance of type Test_02_1 is accessible. Must qualify the allocation with an enclosing
- Cocos2dx-3.1.1 探索之旅02----> 浅析cpp-empty-test运行流程
- Test-02
- 【Test Design Studio 3】-02.智能提示功能增加
- [AX301][Verilog]02_key_test
- Test 02
- test_02
- [SilkTest Learning]_4Test_02
- test06-02 PCM模拟调制
- [Java] JDBC 02 写得比较完美 TestJDBC/TestDML.java(这很关键,看完整性),还引申以后必备 log4j 很 nice
- Cocos2dx-3.1.1 探索之旅02----> 浅析cpp-test运行流程
- test_02
- [Java] JDBC 02 写得比较完美 TestJDBC/TestDML.java(这很关键,看完整性),还引申以后必备 log4j 很 nice
- test-02
- maven项目进行debug as->maven test构建时报error:running on a JRE rather than a JDK? _02
- [Java] 网络-02 TestSockClient / TestSockServer / 学生作品 : talkclient / talkserver
- test_02:BMP to YUV