V8 模块导出调用 C++ 的函数
V8 modules exporting functions that call into c++
我希望嵌入 v8 并有一个模块可用,该模块导出调用 C++ 代码的函数。例如,假设我在 main.js 中有如下内容:
import {foo} from 'FooBar';
foo();
有没有办法让 foo 调用本机 c++ 代码?寻找正确方向的推动,提前致谢!
您可以在此处找到各种示例:https://v8.dev/docs/embed
shell.cc 是我的转到示例:https://github.com/v8/v8/blob/3a0f407d266ec6429a166cf2ec5132f6558d3a51/samples/shell.cc#L110-L114
如果您使用的是最新版本的 V8,则有一个名为 SyntheticModule 的 Module 新子类,它可以让您创建一个虚拟模块,您可以在其中直接设置导出。
Local<Function> foo_func = ...;
Local<Module> module = Module::CreateSyntheticModule(
isolate, name,
{String::NewFromUtf8(isolate, "foo")},
[](Local<Context> context, Local<Module> module) {
module->SetSyntheticModuleExport(String::NewFromUtf8(isolate, "foo"), foo_func);
});
// link `module` just like a normal source-text module.
我希望嵌入 v8 并有一个模块可用,该模块导出调用 C++ 代码的函数。例如,假设我在 main.js 中有如下内容:
import {foo} from 'FooBar';
foo();
有没有办法让 foo 调用本机 c++ 代码?寻找正确方向的推动,提前致谢!
您可以在此处找到各种示例:https://v8.dev/docs/embed
shell.cc 是我的转到示例:https://github.com/v8/v8/blob/3a0f407d266ec6429a166cf2ec5132f6558d3a51/samples/shell.cc#L110-L114
如果您使用的是最新版本的 V8,则有一个名为 SyntheticModule 的 Module 新子类,它可以让您创建一个虚拟模块,您可以在其中直接设置导出。
Local<Function> foo_func = ...;
Local<Module> module = Module::CreateSyntheticModule(
isolate, name,
{String::NewFromUtf8(isolate, "foo")},
[](Local<Context> context, Local<Module> module) {
module->SetSyntheticModuleExport(String::NewFromUtf8(isolate, "foo"), foo_func);
});
// link `module` just like a normal source-text module.