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

在V8中创建自定义JavaScript函数?,javascript,c++,v8,Javascript,C++,V8,我试图在我的项目中嵌入一个自定义函数,它使用V8引擎,但显然我无法使它工作。我使用了我发现的代码,但它似乎已经过时了,或者我只是做错了。我的观点是包含一个自定义javascript文件。我当前的代码(用于测试)如下: HandleScope handle_scope(isolate); v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate); global->Set

我试图在我的项目中嵌入一个自定义函数,它使用V8引擎,但显然我无法使它工作。我使用了我发现的代码,但它似乎已经过时了,或者我只是做错了。我的观点是包含一个自定义javascript文件。我当前的代码(用于测试)如下:

    HandleScope handle_scope(isolate);

    v8::Local<v8::ObjectTemplate> global = v8::ObjectTemplate::New(isolate);
    global->Set(v8::String::NewFromUtf8(isolate, "test", v8::NewStringType::kNormal).ToLocalChecked(),
        v8::FunctionTemplate::New(isolate, test));

    Handle<Context> context = Context::New(isolate);
    Persistent<Context> persistent_context(isolate, context);

    Context::Scope context_scope(context);
    const char* data = "test";
    Handle<String> source = String::NewFromUtf8(isolate, data);

    Handle<Script> script = Script::Compile(source);
    if (!script.IsEmpty())
        Handle<Value> result = script->Run();

因此,我的问题是,如果我做得正确,我将能够创建一个包含我自己的函数,我希望,但我无法执行该函数。

以下是一个项目的一些代码:

Isolate::Scope iscope( isolate_ );
HandleScope hs( isolate_ );


Local<Object> test = Object::New(isolate_);
test->Set(String::NewFromUtf8(isolate_, "javaScriptFunctionName"), Function::New(isolate_, CPP_FN_CALLBACK));
global_template->Set(String::NewFromUtf8(isolate_, "test"), test);
隔离::范围iscope(隔离);
手镜hs(隔离);
本地测试=对象::新建(隔离);
测试->设置(字符串::NewFromUtf8(隔离?,“javaScriptFunctionName”)、函数::新建(隔离?、CPP?、FN?);
全局模板->设置(字符串::NewFromUtf8(隔离“测试”),测试);

这将产生一个名为
window.test.javaScriptFunctionName()

函数的
window.test
对象,您能详细介绍一下
CPP\u FN\u回调
吗?它是一个标准函数吗?就像你在插件的入口点看到的那样?@JacobSchneider是的,没错。只是一个标准的cpp函数,它将int v8 args作为参数
Uncaught ReferenceError: test is not defined
Isolate::Scope iscope( isolate_ );
HandleScope hs( isolate_ );


Local<Object> test = Object::New(isolate_);
test->Set(String::NewFromUtf8(isolate_, "javaScriptFunctionName"), Function::New(isolate_, CPP_FN_CALLBACK));
global_template->Set(String::NewFromUtf8(isolate_, "test"), test);