2、到ftp://ftp.mozilla.org/pub/mozilla.org/nspr下载这个库,并连接到工程中
3、重新build SpiderMonkey工程
4、设置JS_THREADSAFE到自己的工程中(顺便提一下,用到SpiderMonkey还需要设置XP_WIN到自己的工程)
JS_SetErrorReporter(cx, printError);
void printError(JSContext *cx, const char *message, JSErrorReport
*report)
{
std::cout << "JSERROR: " << std::string(report->filename ?
report->filename : "NULL") \
<<" (line:" << report->lineno << ")" <<std::endl;
std::cout << " "<< message << std::endl;
std::cout <<" Flags:";
if (JSREPORT_IS_WARNING(report->flags))
std::cout <<" WARNING"<< std::endl;
if (JSREPORT_IS_EXCEPTION(report->flags))
std::cout <<" EXCEPTION"<< std::endl;
if (JSREPORT_IS_STRICT(report->flags))
std::cout <<" STRICT"<< std::endl;
std::cout <<" Error number:" << report->errorNumber << std::endl;
}
我改变一下jsgen的源码,使其能够生成读函数和写函数,
变量定义的规则是:
[static] [virtual] [const] type name [readonly] [normal] [const] [value];
value表示读写的变量名,如果没有,则会有/*TODO**/的提示。
对于jsgen的用法,附件中有readme.html文件说明。
我觉得这个gen还是相当的不错,连继承都支持(不过依然是单继承,可能多继承的处理太复杂了)
还有一个更好的地方就是:能够在javascript外先生成对象,然后共享给javascript使用。javascript使用后,C++程序依然可以使用。
对虚拟函数的支持,在基类中用JSClass wrapper后,在子类中就不用再wrapper了,只需要在子类中覆盖该虚拟函数就可。(标准的C++函数)
可以将jsgen用到makefile文件中,在编译前先执行生成wrapper文件。
需要在要被wrapper类的.cpp文件中加入一行:
#include "<生成的文件名>.cpp"
没有看错!!这是.cpp文件,这样生成的.cpp文件就不用加入到工程中了。
如果是类类型,则生成后代码注意在使用到的地方做些修改。因为jsgen只是简单将object 装成了JSVal。
具体如何使用看附件的例子