2014-12-19 137 views
2

我有一些JavaScript文件,我想在调用我的C++函数期间调用此文件中定义的某些函数。请注意,我想通过名称来调用它,而不仅仅是作为参数传递的一些随机函数。从C++ node.js扩展调用javascript函数

test.js:

function someFunc() 
{ 
    // do something... 
} 

var my_module = require("my_native_module"); 
my_module.nativeFunc(); 

TEST.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]); 

但我需要通过名称来找到该功能。

回答

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); 
+0

我使用Node.js的V0。 10.33和v8 :: String没有任何NewFromUtf8方法。查看v8文档NewFromUtf8应该在那里,但它不在包含在node.js – trbvm 2014-12-19 08:50:16

+0

中''NewFromUtf8'用于节点v 0.12。 'String :: New(“Whatevs”)'适用于较旧的节点。 – carter 2015-07-10 21:31:46