У меня есть файл javascript, и я хочу вызвать некоторую функцию, определенную в этом файле во время вызова моей функции C++. Обратите внимание, что я хочу назвать его по имени, а не только некоторой случайной функцией, переданной как аргумент.вызов функции javascript из C++ node.js extension
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]);
Но вместо этого мне нужно найти функцию по имени.
Я использую Node.js v0. 10.33 и v8 :: String не имеет метода NewFromUtf8. Глядя на документацию v8, предполагается, что NewFromUtf8 присутствует там, но он отсутствует в поставляемых вместе с node.js – trbvm
'NewFromUtf8' для узла v 0.12. 'String :: New (« Whatevs »)' для более старого узла. – carter