请问一个关于jsb自动绑定的问题

各位大佬,

我在做一个jsb自动绑定,cocos creator版本2.0.2,参考了一些网上的教程,genbindings.py可以执行成功了,这时候生成了
auto/api/jsb_xx_auto_api.js
auto/jsb_xx_auto.cpp
auto/jsb_xx_auto.hpp
三个文件,这些文件非常简单,就是一个xx命名空间,里面有一个SdkXX的类,类里面有一个testPrint方法。

我把cpp和hpp文件加到Classes目录,然后编译打包ios工程,可以成功。但是js脚本里调用 xx.SdkXX.testPrint()的时候提示找不到testPrint方法,我依次把xx和xx.SdkXX都打印了一下,显示这个类是有的,但是类里面为空,确实没有testPrint方法。但是实际上jsb_xx_auto.cpp里面是存在static bool js_xx_SdkXX_testPrint(se::State& s)这个方法的,也在AppDelegate里面注册了。

请问有人遇到过这个问题吗?另外,在整个过程中我没有用到生成出来的jsb_xx_auto_api.js文件,请问这个文件要放在哪里呢?谢谢。

这个文件不参与编译,打包。只是用来提示绑定接口是什么,参数是怎样的。

正确注册的话,JS 方法 xx.SdkXX.testPrint 会有的,你可以参考近期 webview 的自动绑定 PR,里面有注册的方式

Re-added WebView on iOS & Android for Creator 2.1

感谢回复,昨天的问题找到了,是因为testPrint定义的并不是static函数,而是类函数。
于是我在js里面调用的时候就变成了这样,
var t = new xx.SdkXX();
t.testPrint();

这样写了以后遇到一个新的很奇怪的问题,自动绑定导出来的代码是这样的
static bool js_xx_SdkXX_testPrint(se::State& s)
{
xx::SdkXX* cobj = (xx::SdkXX*)s.nativeThisObject();
SE_PRECONDITION2(cobj, false, “js_xx_SdkXX_testPrint: Invalid Native Object”);
const auto& args = s.args();
size_t argc = args.size();
if (argc == 0) {
cobj->testPrint();
return true;
}
SE_REPORT_ERROR(“wrong number of arguments: %d, was expecting %d”, (int)argc, 0);
return false;
}

打断点执行的时候发现,在第一行nativeThisObject执行完以后cobj是null,所以执行在SE_PRECONDITION2(cobj, false, “js_xx_SdkXX_testPrint: Invalid Native Object”);中断了,但是我如果不管这个错,直接把这个SE_PRECONDITION2给注释掉,然后cobj->testPrint居然可以被执行。即使断点里调试显示cobj是NULL,真的很奇怪。

你有遇见过这个情况吗?谢谢。

搞定了,自动绑定的时候需要写上构造函数,谢谢了哈。