草庐IT

c++ - 如何从 C++ 调用 javascript 回调

我正在尝试从函数的另一个点调用V8中的回调。所以这段代码注册回调:if(args.Length()){String::Utf8Valueevent(args[0]->ToString());if(event.length()){Isolate*isolate=V8Interface::getCurrent()->getIsolate();Lockerlocker(isolate);HandleScopescope(isolate);callbackcb=callback(isolate,Local::Cast(args[1]));if(!events.count(*event)){ev

javascript - 如何从 C++ 中返回一个新的 V8 javascript "class"实例?

当使用V8作为脚本引擎时,我向Javascript公开了一个名为construct_with_ec6_syntax的C++函数。这个函数在被调用时应该简单地返回一个some_ec6_class的实例。这个C++函数基本上应该执行以下等效的Javascript:returnnewsome_ec6_class(111,222);这个类将在Javascript中定义如下EC6语法:classsome_ec6_class{constructor(x,y){this.result=x+y;}}我的目标是在Javascript中运行以下...varthe_instance=construct_wi

c++ - 我应该在 v8::External 中手动删除指针吗?

Localtpl=ObjectTemplate::New(isolate);tpl->SetInternalFieldCount(1);Localret=tpl->NewInstance();TestExternal*ex=newTestExternal();ret->SetInternalField(0,External::New(isolate,ex));当ret不再使用时,我是否应该手动删除ex指针?表明我应该或不应该这样做的证据源代码在哪里? 最佳答案 是的,C++需要手动内存管理:如果您使用new手动创建一个对象,那么您还

javascript - 在 V8 中创建自定义 JavaScript 函数?

我正在尝试将一个自定义函数嵌入到我的项目中,该项目使用V8引擎,但显然我无法使其正常工作。我使用过我发现的代码,但它似乎已经过时,或者我只是做错了。我的观点是包含一个自定义javascript文件。我当前的代码(用于测试)是这样的:HandleScopehandle_scope(isolate);v8::Localglobal=v8::ObjectTemplate::New(isolate);global->Set(v8::String::NewFromUtf8(isolate,"test",v8::NewStringType::kNormal).ToLocalChecked(),v8

javascript - 如何从 Javascript 访问用 C++ 创建的动态变量? (通过 V8 绑定(bind))

Google很好地解释了如何wrapC++classmethodswithaccessorsthatcanbeusedfromtheV8Javascriptengine.但是,他们没有提到如何确定将具有这些访问器属性的JavaScript对象的名称。我如何告诉V8JavascriptC++类实例(来自示例)的名称是什么?或者,如果它已有名称,那是什么?这两行设置访问器:point_templ.SetAccessor(String::New("x"),GetPointX,SetPointX);point_templ.SetAccessor(String::New("y"),GetPoin

c++ - 作用域和线程局部变量如何在(V8 的)C++ 中工作?

我对V8的作用域如何工作很感兴趣。堆栈上的作用域对象如何找到堆栈更上层的其他作用域对象和上下文?深入研究HandleScopes的工作原理后,我发现它们依赖于线程局部变量。这让我想知道这些在C++中是如何工作的,我已经找到了实现,但仍然觉得我不明白发生了什么。api.cc--HandleScope查找当前IsolateHandleScope::HandleScope(){i::Isolate*isolate=i::Isolate::Current();API_ENTRY_CHECK(isolate,"HandleScope::HandleScope");v8::Implementati

c++ - 谷歌 V8 : access local variables in C++

有人知道如何在C++的嵌套函数调用中查找局部变量吗?考虑以下示例://e.g.aglobalvariableinthebrowservarglobal="global_value";functionfoo(){varglobal="local_value";myCppFunction("global",global);}foo();我现在的问题是,在myCppFunction的实现中,我如何从“foo”访问函数局部变量“global”(不是值,这将由第二个参数给出)?HandleMyCppFunction(constArguments&args){LocalvarName=args[0

c++ - 在 node.js 绑定(bind)中实现继承

我正在围绕C++库编写Node.js绑定(bind)。我可以识别C++库中的关键对象,我可以将这些对象作为类公开给Node.js(即ObjectWrap的衍生物)。我还可以看到这些对象之间的继承关系。如何将ClassA、ClassB、ClassC公开为node.js类(ObjectWrap的派生类)并操作它们的原型(prototype)(在v8C++代码中)以便ClassB和ClassC是ClassA的派生? 最佳答案 这可以使用v8::FunctionTemplate的Inherit方法来完成。解释了here.这是一个工作示例。C

c++ - 将 C++ 对象包装到 Node 插件中的 v8 对象

我目前正在用C++编写一个Node插件,我遇到了一个问题,我需要创建并返回一个v8数组,其中填充了v8包装的C++对象实例。目前,代码看起来像这样v8::HandleController::nodeArray(constv8::Arguments&args){v8::HandleScopescope;Controller*controller=ObjectWrap::Unwrap(args.This());conststd::vector*foobars=controller->getFoobars();unsignedintfoobarCount=foobars->size();v8

c++ - 如何在 native Node 模块中维护零拷贝?

我正在为具有零拷贝数据查找功能的进程内数据库编写nativeNode模块。我希望我的模块也有这种能力。换句话说,当我从数据库中获取数据时,我想将数据传递给V8,而不需要复制内存或解析某些东西。我该怎么做?到目前为止,我所看到的所有方法都涉及在JSON之间来回解析(在这种情况下非常浪费资源)或实例化V8数据结构并将数据复制到其中。注意:如果您想知道,零复制数据查找意味着(简而言之)数据库引擎在检索数据时不需要复制内存。 最佳答案 我想我找到了解决方案,尽管它相当有限。可以在此处找到有趣的文档:https://developers.go