2012-11-01 9 views
5

Sono nuovo in Javascript e nella libreria V8. Il mio requisito è chiamare una funzione C++ e restituire una struct C al modulo Javascript.come restituire una struct dalla funzione V8 C++ al modulo javascript

struct empDetails { 
    int empNo; 
    string empName; 
}; 

v8::Handle<v8::Value> getDetails(const v8::Arguments &args) { 
    if ((args.Length() != 1) || !args[0]->IsUint32()) { 
     return v8::ThrowException(v8::Exception::Error  
       (v8::String::New("Invalid> arguments."))); 
    } 
    uint32_t userId = args[0]->ToUint32()->Value(); 
    empDetails e; 
    company::GetEmpdetails(userId, e); // other static function in my project 
    return e; 
} 

A dichiarazione di ritorno, sto ricevendo errore. Qualcuno potrebbe dirmi come restituire una struct dalla funzione V8 C++.

+2

Che cosa significa per restituire uno struct C a JavaScript? Non vorresti (necessario?) Per avvolgerlo in un oggetto JavaScript come '{empNo: 1, empName:" John Doe "}'? – maerics

+1

La sezione [V8 embedder's guide about Object Templates] (https://developers.google.com/v8/embed#templates) probabilmente ti porterà sulla giusta strada. – maerics

+0

sembra non aver letto abbastanza sui template degli oggetti v8, grazie per la tua risposta – coder

risposta

6

Si desidera creare un oggetto Javascript e popolare tutti i membri di esso con i propri dati.

#define function(name) v8::Handle<v8::Value> name(const v8::Arguments& a) 

    function (example_object) { 
     v8::HandleScope handle_scope; 
     Handle<Object> Result = Object::New(); 
     Result->Set(String::New("name"), String::New("Stackoverflow")); 
     Result->Set(String::New("url"), String::New("http://stackoverflow.com")); 
     Result->Set(String::New("javascript_tagged"), Number::New(317566)); 
     return handle_scope.Close(Result); 
    } 

chiamata da JavaScript:

log(JSON.stringify(example_object())) 

uscita

{"name":"Stackoverflow","url":"http://stackoverflow.com","javascript_tagged":317566} 
1

Quando si desidera creare modulo node.js,

npm install ref 
npm install ref-array 
npm install ref-struct 

nell'origine js:

var ref = require('ref'); 
var ArrayType = require('ref-array') 
var StructType = require('ref-struct'); 
var empDetails = StructType({ 
    empNo: ref.types.int, 
    empName: ArrayType('char', STRING_LENGTH) 
}); 
var result = new empDetails; 
getDetails(999, result.ref()); 

nell'origine modulo:

struct empDetails { 
    int empNo; 
    char empName[STRING_LENGTH]; 
}; 
v8::Handle<v8::Value> getDetails(const v8::Arguments &args) { 
    if((args.Length() != 2) || !args[0]->IsUint32()){ 
     return v8::ThrowException(v8::Exception::Error  
      (v8::String::New("Invalid> arguments."))); 
    } 
    uint32_t userId = args[0]->ToUint32()->Value(); 
    struct empDetails src; 
    company::GetEmpdetails(userId, src); 
    v8::Handle<v8::Object> dst = args[1]->ToObject(); 
    if(node::Buffer::Length(dst) >= sizeof(struct empDetails)) 
     memcpy(node::Buffer::Data(dst), &src, sizeof(struct empDetails)); 
    return args.This(); 
} 
Problemi correlati