Thx Zac, my best bugged code is: void GetPointX(Local<String> property, const PropertyCallbackInfo<Value>& info) { Local<Object> self = info.Holder(); Local<External> wrap = Local<External>::Cast(self->GetInternalField(0)); void* ptr = wrap->Value(); int value = static_cast<Point*>(ptr)->x_; info.GetReturnValue().Set(value); }
void SetPointX(Local<String> property, Local<Value> value, const PropertyCallbackInfo<void>& info) { Local<Object> self = info.Holder(); Local<External> wrap = Local<External>::Cast(self->GetInternalField(0)); void* ptr = wrap->Value(); static_cast<Point*>(ptr)->x_ = value->Int32Value(); } void v8_Point(const v8::FunctionCallbackInfo<v8::Value>& args) { printf("Is constructor call: %s\n", args.IsConstructCall()?"yes":"no"); Point * p = new Point(12); printf("Internal field count: %d\n",args.This()->InternalFieldCount()); args.This()->SetInternalField(0, External::New(args.GetIsolate(), p)); args.GetReturnValue().Set(args.This()); } ManagerV8::ManagerV8() { const char * temp_cc1 = ""; V8::InitializeICUDefaultLocation(temp_cc1); V8::InitializeExternalStartupData(temp_cc1); platform = platform::CreateDefaultPlatform(); V8::InitializePlatform(platform); V8::Initialize(); }; ManagerV8::~ManagerV8() { V8::Dispose(); V8::ShutdownPlatform(); delete platform; } std::string ManagerV8::v8_execute(const char* scriptSource, Point* shareVar) { Isolate::CreateParams create_params; create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator(); std::string temp_variable_result; Isolate* isolate = Isolate::New(create_params); { Isolate::Scope isolate_scope(isolate); HandleScope handle_scope(isolate); Local<ObjectTemplate> global_templ = ObjectTemplate::New(isolate); Local<FunctionTemplate> point_constructor = FunctionTemplate::New(isolate, v8_Point); point_constructor->InstanceTemplate()->SetInternalFieldCount(1); point_constructor->InstanceTemplate()->SetAccessor(String::NewFromUtf8(isolate, "x"), GetPointX, SetPointX); Local<Context> context = Context::New(isolate, NULL, global_templ); Context::Scope context_scope(context); Local<String> source = String::NewFromUtf8(isolate, scriptSource, NewStringType::kNormal).ToLocalChecked(); Local<Script> script = Script::Compile(context, source).ToLocalChecked(); if(!script.IsEmpty()) { Local<Value> result = script->Run(context).ToLocalChecked(); String::Utf8Value utf8(result); temp_variable_result = *utf8; } } isolate->Dispose(); delete create_params.array_buffer_allocator; return temp_variable_result; } And the header: class Point { public: Point(int x) : x_(x) { } int x_; }; class ManagerV8 { Platform* platform; public: int x_; ManagerV8(); ~ManagerV8(); std::string v8_execute(const char* scriptSource, Point* shareVar); }; As the result of JS code "*x+1;*" is: <unknown>:12: Uncaught ReferenceError: x is not defined # # Fatal error in v8::ToLocalChecked # Empty MaybeLocal. # Received signal 4 ILL_ILLOPN 000000cf345f ==== C stack trace =============================== [0x000000cf21ef] [0x7f06b9b088d0] [0x000000cf345f] [0x000002709e28] [end of stack trace] All this code based on stackoverflow and Embedder's guide. Clear code of Embedder's guide don't work at all: ==== C stack trace =============================== [0x000000cf1dbf] [0x7fb45a6998d0] [0x0000004a2851] [0x00000073959e] [0x00000078534e] [0x000000784a2d] [0x00000072a8b7] [0x00000072b058] [0x0000007322fc] [0x2b4f6cd840dd] [end of stack trace] вторник, 25 апреля 2017 г., 6:41:29 UTC+7 пользователь Zac Hansen написал: > > it looks at least pretty close. can you post some code and say what > specific problems you're having? > > On Thursday, April 20, 2017 at 12:57:18 AM UTC-7, AleK Shmakov wrote: >> >> "Embedder's Guide" <https://github.com/v8/v8/wiki/Embedder%27s-Guide> >> unfotunatelly is not valid. >> > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.