// build) g++ v8_test.cc -o v8_test -lv8 #include <v8.h> #include <string> char * js_src = "function laugh() {" " print ('HAHAHA'); " "}; " "s = append ('echo');" "print (s);" "print ('I am ' + obj_test.name); " "obj_test.func ();"; v8::Handle<v8::Value> PrintArgs (const v8::Arguments &args) { v8::String::AsciiValue str(args[0]); printf ("[Print] '%s'\n", *str); return v8::Undefined (); } v8::Handle<v8::Value> PrintTest (const v8::Arguments &args) { printf ("[Print Test]\n"); return v8::Undefined (); } v8::Handle<v8::Value> AppendExclamation (const v8::Arguments &args) { v8::String::AsciiValue str(args[0]); std::string s (*str); s += "!!!"; return v8::String::New (s.c_str (), s.length()); } int main(int argc, char* argv[]) { v8::HandleScope handle_scope; v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New (); // install a original function to global context global->Set(v8::String::New ("print"), v8::FunctionTemplate::New (PrintArgs)); global->Set(v8::String::New ("append"), v8::FunctionTemplate::New (AppendExclamation)); // install a object to global context v8::Handle<v8::ObjectTemplate> obj = v8::ObjectTemplate::New (); obj->Set ("name", v8::String::New ("DROID")); obj->Set ("func", v8::FunctionTemplate::New (PrintTest)); global->Set ("obj_test", obj); // create a source code and compile v8::Handle<v8::String> source = v8::String::New(js_src); v8::Handle<v8::Primitive> undef = v8::Undefined (); v8::Persistent<v8::Context> context = v8::Context::New(NULL, global); v8::Context::Scope context_scope(context); v8::Handle<v8::Script> script = v8::Script::Compile(source, undef); v8::Handle<v8::Value> result = script->Run(); context.Dispose(); return 0; }