在MuJS的Native方法中如何获取第二个函数参数的引用?
解决MuJS中获取函数参数引用的问题
你的问题核心在于js_tovalue仅返回栈中指定位置值的指针,不会将该值推送到栈顶,而js_ref只能获取当前栈顶值的引用。只需调整栈操作逻辑,就能正确拿到第二个参数的函数引用:
修正后的C++代码:
void Natives::on(js_State* js) { const char* event = js_tostring(js, 1); // 将第二个参数(传入的函数)推到栈顶 js_get(js, 2); // 此时栈顶是目标函数,调用js_ref获取引用 const char* ref = js_ref(js); // 后续可将ref存储,用于后续调用该函数 }
关键说明
js_get(js, 2):把栈中第2位的参数(即传入的回调函数)复制一份推到栈顶,让js_ref能捕获到它的引用。- 若后续需要操作该函数值,可通过
js_tovalue(js, -1)获取栈顶值的指针(此时栈顶就是目标函数)。 - 记得在不再需要该引用时,调用
js_unref(js, ref)释放资源,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Bork
相关产品推荐
相关产品推荐

