从 C++ 节点调用 JavaScript 函数.js扩展

calling javascript function from c++ node.js extension

本文关键字:函数 js 扩展 JavaScript 调用 C++ 节点      更新时间:2023-10-16

我有一些javascript文件,我想在调用我的c ++函数期间调用此文件中定义的某个函数。请注意,我想按名称调用它,而不仅仅是作为参数传递的一些随机函数。

测试.js:

function someFunc()
{
    // do something...
}
var my_module = require("my_native_module");
my_module.nativeFunc();

测试.cpp:

using namespace v8;
Handle< Value > nativeFunc(const Arguments & args)
{
    HandleScope scope;
    // I want to somehow get someFunc value from current context by name
    Local< Value > function_value = Context::GetCurrent()->Global()->Get_By_Name(String::New("someFunc")); // this doesn't work
    //  probably check that function_value is really a function...
    Local< Function > function_callable = Local< Function >::Cast(function_value);
    function_callable->Call(Context::GetCurrent()->Global(), 0, nullptr);
    return(scope.Close(Undefined()));
}

所有示例似乎都接受该函数作为参数(回调(,如下所示:

Local<Function> cb = Local<Function>::Cast(args[0]);

但是我需要按名称查找函数。

我没有准备好的快速示例来测试这一点,但是正在查看一些代码,这些代码暗示您应该能够执行以下操作:

  Handle<String> process_name = String::NewFromUtf8(GetIsolate(), "Foo");
  Handle<Value> process_val = context->Global()->Get(process_name);
  if (!process_val->IsFunction()) return false;
  Handle<Function> process_fun = Handle<Function>::Cast(process_val);
  process_fun->Call(Context::GetCurrent()->Global(), 0, nullptr);