V8模块导出调用C ++的函数

时间:2019-07-12 16:40:40

标签: v8 embedded-v8

我希望嵌入v8并提供一个可用模块,该模块可以导出调用c ++代码的函数。例如,假设我在main.js中有以下内容:

import {foo} from 'FooBar';

foo();

是否可以通过foo调用本机c ++代码?在寻求正确方向的推动,在此先感谢!

2 个答案:

答案 0 :(得分:1)

如果您是V8的最新版本,则有一个名为SyntheticModule的Module的新子类,它将使您创建一个虚拟模块,您可以在其中直接设置导出。

https://cs.chromium.org/chromium/src/v8/include/v8.h?l=1406&rcl=d7cac7cb6a468995c1ec48611af283be8fb6c1ab

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.

答案 1 :(得分:0)