2014-12-19 132 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