我正在编写一个JavaScript应用程序,通过Google的V8访问一些C++代码。
一切运行正常,但我无法弄清如何抛出JavaScript异常,并在JavaScript代码中捕获该异常,而这个异常是从C++方法中抛出的。
例如,如果我有一个C++函数:
...
using namespace std;
using namespace v8;
...
static Handle<Value> jsHello(const Arguments& args) {
String::Utf8Value input(args[0]);
if (input == "Hello") {
string result = "world";
return String::New(result.c_str());
} else {
// throw exception
}
}
...
global->Set(String::New("hello"), FunctionTemplate::New(jsHello));
Persistent<Context> context = Context::New(NULL, global);
...
暴露给JavaScript后,我想在JavaScript代码中使用它,如:
try {
hello("throw me some exception!");
} catch (e) {
// catched it!
}
如何在C++代码中正确地抛出V8异常?