SpiderMonkey的资源

9 views
Skip to first unread message

邱戈川

unread,
Mar 28, 2006, 5:00:14 AM3/28/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统

candid Qiu

unread,
Mar 28, 2006, 6:55:23 AM3/28/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
附上一个例子
TestJS.rar

邱戈川

unread,
Mar 28, 2006, 10:41:31 PM3/28/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
如果需要支持多线程则必须,
1、需要在SpiderMonkey工程设置JS_THREADSAFE

2、到ftp://ftp.mozilla.org/pub/mozilla.org/nspr下载这个库,并连接到工程中

3、重新build SpiderMonkey工程

4、设置JS_THREADSAFE到自己的工程中(顺便提一下,用到SpiderMonkey还需要设置XP_WIN到自己的工程)

邱戈川

unread,
Mar 29, 2006, 1:48:20 AM3/29/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
检测javascript的运行时错误,用JS_SetErrorReporter设置错误处理函数如:

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;
}

candid Qiu

unread,
Mar 29, 2006, 8:21:05 AM3/29/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
例子更新:加入继承类的js包装,这样已经包装好的基类可以被子类使用。
TestJS.rar

candid Qiu

unread,
Mar 30, 2006, 4:47:33 AM3/30/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
利用JSGen可以方便的生成JSClass Wrapper。
问题:无法用thread safe开关编译的js

我改变一下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.rar
TestJS.rar

candid Qiu

unread,
Mar 30, 2006, 4:51:05 AM3/30/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
漏了一点:
注意对类型的使用。

如果是类类型,则生成后代码注意在使用到的地方做些修改。因为jsgen只是简单将object 装成了JSVal。

candid Qiu

unread,
Mar 31, 2006, 12:59:17 AM3/31/06
to 基于ACE和SpiderMonkey的SMS虚拟运营系统
JSGen新增功能:
1、支持inline的写法
2、支持String和JSFunction*间的转换(这样,在script中就可以指定对应事件到达时会运行得script的函数)
写法为:void FunctionName(int MessageID, string/*:JSFuntion*/ sFunName)
C++保存的是文件名,但是script调用函数时给入的是JSFuntion*。

具体如何使用看附件的例子

jsTest.zip
Reply all
Reply to author
Forward
0 new messages