草庐IT

javascript - 如何在 V8 中调用不带参数的函数?

我发现了如何调用带参数的函数。intargc=1;v8::Handleargv[]={v8::String::New("arg")};v8::Localresult=function->Call(foo,argc,argv);但是我想调用一个不带任何参数的函数,因此argc必须是0而argv必须是一个零长度的数组,我猜这在C++中是不可能的。如何在V8中正确调用不带参数的JavaScript函数? 最佳答案 非常简单,只需使用:function->Call(function,0,NULL);

javascript - 在 V8 中从 C++ 代码创建自定义错误类

我想在原生NodeJS(0.11.5)扩展中创建自定义异常。我正在尝试在V8(3.20.11)中创建内置Error类的子类。基本上,我正在寻找与以下Javascript代码等效的C++:functionMyError(message){Error.apply(this,arguments);this.message=message;}MyError.prototype=newError;MyError.prototype.name=MyError.name;newMyError("message")我尝试挖掘V8源代码,发现以下辅助方法似乎可以完成我想要的部分操作:HandleFact

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

c++ - 使用 FILE_FLAG_DELETE_ON_CLOSE 标志创建文件

在描述我的问题之前,这里是我正在编写的程序(IHExplorer.exe)的描述:这是一个C++应用程序。IHExplorer应用程序看起来尽可能像Windows资源管理器窗口。但有一个异常(exception),那就是从这个资源管理器窗口中启动文件会首先将它们解密到用户的临时文件夹,然后启动与文件扩展名关联的应用程序并在关闭时删除文件。我遇到的问题是文件关闭时自动删除。这是一个场景:用户在IHExplorer中双击加密的.txt文件。IHExplorer解密内存中的.txt文件,然后使用::CreateFile将其写入%TEMP%,它返回文件的句柄(IHExplorer必须至少保持此

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++ - 将 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