我希望通过google v8引擎访问javascript到我的c ++函数,并根据我的javascript函数中的参数返回结果.
我的javascript函数如下:
var result = MyFc(
{
'stringData':'abc',
'numberData':123,
'arrData':[1,2,3],
'objData':{'a':true,'b':false,'c':true},
'callback':function(){}
}
);
Run Code Online (Sandbox Code Playgroud)
我用了
global->Set(v8::String::New("myFc"), v8::FunctionTemplate::New(MyFc));
v8::Handle<v8::Value> MyFc(const v8::Arguments& args) {
obj = args[0]->...
if( obj->stringData != 'abc' ){
//....
}
if( obj->numberData != 123 ){
//....
}
if( obj->arrData[2] != 3 ){
//....
}
if( obj->objData->b == false ){
//....
}
if( obj->callback !='abc' ){
//....
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何解析c ++ v8中的arguments对象?我想访问参数中对象的所有键值,值可以是数字,字符串,数组,匿名函数或对象.
ezh*_*zhi 13
使用的类型检查方法v8::Value(IsBoolean(),IsArray(),IsObject()等等),然后v8::Handle<T>::Cast(v8::Handle<S>)投args[i]值以对应类型.
您的代码应如下所示:
if (args[0]->IsArray()) {
Handle<Array> array = Handle<Array>::Cast(arg[0]);
for (int i = 0; i < array->Length(); i++) {
//...
}
}
if (args[1]->IsObject()) {
Handle<Object> object = Handle<Object>::Cast(args[i]);
Handle<Value> fieldValue = object->Get(String::New("a"));
Handle<Value> callback = object->Get(String::New("callback"));
if (callback->IsFunction()) {
Handle<Function> fn = Handle<Function>::Cast(callback);
}
}
Run Code Online (Sandbox Code Playgroud)