如何在c v8中解析参数对象

前端之家收集整理的这篇文章主要介绍了如何在c v8中解析参数对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望通过google v8引擎访问 javascript到我的c函数,并根据我的javascript函数中的参数返回结果.

我的javascript函数如下:

@H_404_4@var result = MyFc( { 'stringData':'abc','numberData':123,'arrData':[1,2,3],'objData':{'a':true,'b':false,'c':true},'callback':function(){} } );

我用了

@H_404_4@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' ){ //.... } }

我的问题是如何在c v8中解析参数对象?我想访问参数中对象的所有键值,值可以是数字,字符串,数组,匿名函数或对象.

解决方法

使用v8 :: Value(IsBoolean(),IsArray(),IsObject()等)的类型检查方法,然后使用v8 :: Handle< T> :: Cast(v8 :: Handle< S>)来强制转换args [i]值到相应的类型.

您的代码应如下所示:

@H_404_4@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); } }

猜你在找的C&C++相关文章