gpt4 book ai didi

c++ - node.js 的 v8 扩展 - 无法将 FunctionTemplate 设置为目标

转载 作者:行者123 更新时间:2023-11-30 02:08:20 27 4
gpt4 key购买 nike

我刚开始通过 v8 扩展(按照 Node.JS docsv8 API docs 上的说明)编写到 C 库的绑定(bind)(准确地说是链接语法)。

我的问题是出现以下构建错误:

/usr/include/v8.h: In constructor âv8::Handle<T>::Handle(v8::Handle<S>) [with S = v8::FunctionTemplate, T = v8::Value]â:
node.cc:85:68: instantiated from here
/usr/include/v8.h:195:5: error: cannot convert âv8::FunctionTemplate*â to âv8::Value* volatileâ in assignment

...当尝试构建以下代码时:

#include <v8.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include "link-includes.h"

using namespace v8;

Dictionary dict;
Parse_Options opts;

static Handle<Value> v8parse(const Arguments& args)
{
/* snip */
}

extern "C" void init (Handle<Object> target)
{
HandleScope scope;
target->Set(String::New("parse"), FunctionTemplate::New(v8parse));

setlocale(LC_ALL, "");
opts = parse_options_create();
dict = dictionary_create_lang("en");
}

我感觉好像我已经按照上述链接上的说明进行操作,并按照它们链接到的示例的模式进行操作,但是我得到了上述错误。不是那里最敏锐的 C++ 编码器,所以很可能错误就在眼前。唉,我很茫然。

最佳答案

Set方法需要一个 Handle<Value> ,但您传递的是 FunctionTemplate,它无法自动转换自身。您需要在模板上使用 GetFunction 来获取它的值句柄。

target->Set(String::New("parse"), FunctionTemplate::New(v8parse)->GetFunction());

但是,这里有一个宏,所以我建议这样做:

NODE_SET_METHOD(target, "parse", v8parse);

我发现这篇博文/示例代码在我玩这些东西时很有用。 https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/

我不是 100% 确定,因为您发布的 nodejs 文档中没有提到它,但我认为您还需要 extern "C" { NODE_MODULE(yourmodulefilename, init); }在文件底部让 Node 知道这是一个要加载的模块。

关于c++ - node.js 的 v8 扩展 - 无法将 FunctionTemplate 设置为目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025532/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com