【问题标题】:V8 modules exporting functions that call into c++V8 模块导出调用 C++ 的函数
【发布时间】:2019-07-12 16:40:40
【问题描述】:

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

import {foo} from 'FooBar';

foo();

有没有办法让 foo 调用本机 C++ 代码?寻找正确方向的推动力,在此先感谢!

【问题讨论】:

    标签: v8 embedded-v8


    【解决方案1】:

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

    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.
    

    【讨论】:

    • 太棒了!正是我想要的:D!
    【解决方案2】:

    【讨论】:

    • 看起来像分配给全局对象的那些,而不是实际更改从您在实例化模块时使用的解析回调返回的模块。我正在寻找专门向调用本机代码的模块添加一个函数,如果有办法做到这一点?
    猜你喜欢
    • 2017-02-09
    • 2017-01-11
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多