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

2024-01-09

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

import {foo} from 'FooBar';

foo();

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


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

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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

V8 模块导出调用 c++ 的函数 的相关文章

  • v8 存储一个字符串需要多少内存?

    我正在尝试计算 v8 中字符串的内存使用量 并且我知道单个字符将占用 2 个字节 但是当我在开发工具中检查浅层大小和保留大小时 我对结果感到困惑 function Student this name lll var a new Studen
  • JavaScript - 使代理无法检测

    据我了解 ES 规范是这么说的Proxy 用于代理对象 函数和类的全局构造函数 不可检测 这意味着如果我代理一个函数 使用该代理函数的任何人都无法检测到我使用了代理 然而 显然我误解了它 因为代理功能是可以检测到的 例如 new Proxy
  • setTimeout 是 JavaScript 本身的一部分还是只是浏览器提供的 api?

    setTimeout 是 JavaScript 本身的一部分还是只是浏览器提供的 api 它是 ES 的一部分吗 The setTimeout https developer mozilla org en US docs Web API W
  • 在 V8 中使用数组(性能问题)

    我尝试了下一个代码 它在 Google Chrome 和 Nodejs 中显示了类似的结果 var t new Array 200000 console time wtf for var i 0 i lt 200000 i t push M
  • 追踪流星/节点光纤中的堆栈溢出

    我现在看到了这个崩溃 并且对节点光纤基础设施不够熟悉 不知道从哪里开始解释错误或检测代码 Meteor server running on http localhost 3000 W202407 10 06 05 740 8 STDERR
  • 从 v8::Arguments 转换为 C++ 类型

    我正在尝试用 C 创建 Node js 模块 但我对 v8 Arguments 类感到困惑 假设我有一个用于发送电子邮件的 Javascript 类 它有一个具有以下签名的方法 Mailer sendEmail Array recipien
  • 最新 Chrome/V8 版本中的对象描述符 getter/setter 性能

    Given var obj var a 1 obj a 1 obj aGetter function return a obj aSetter function val a val Object defineProperty obj a e
  • V8 中 JSON.stringify() 是确定性的吗?

    我还没见过 还没 JSON stringifyNode JS 中的不确定性 不能保证它在规范级别上具有确定性 但是V8呢 它的实现是确定性的吗 是否能保证它在未来的 V8 版本中保持确定性 Edit 对于确定性 我的意思是无论以下断言的值是
  • 什么是 Node.js? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 Node.js 缓冲区传递给 C++ 插件

    test js buf new Buffer 100 for var i 0 i lt 100 i buf i i addon myFync buf 插件 cpp Handle
  • NodeJS 无限循环内存消耗

    我不知道这是否是 Node 或 V8 的错误 但如果我运行以下代码 节点进程会泄漏内存 GC 似乎从未启动 并且在几秒钟内它就消耗了 gt 1GB 的内存 这是意想不到的行为 我错过了什么吗 这是代码 for console log 1 1
  • 如何抓取由 R 渲染的 JavaScript 网站?

    想问下有没有什么好的方法可以抓取下面的网站 基本上我想获取所有产品的名称和价格 然而 价格信息存储在一些 JQuery 脚本中 硒是唯一的解决方案吗 想过用V8 Jsonlite 但好像不太适用 如果你能在 R 中提供一些替代方案 那就太好
  • 转储整个数组:console.log 和 console.dir 输出“... NUM more items]”

    我正在尝试记录一个长数组 以便可以在终端中快速复制它 但是 如果我尝试记录数组 它看起来像 item item gt gt more items lt lt lt 399 more items 如何记录整个数组以便我可以快速复制它 Sett
  • 将对象传递给节点错误类返回不可访问的对象

    我要返回一个Error对象 我向其传递一个对象 而不是简单的消息 if err return myCallback new Error error code sample machine readable code error messag
  • Nodejs 分析:父级(切片字符串)

    我分析了我的 Nodejs 应用程序并看到一些奇怪的字符串 它被标记为父级 切片字符串 我使用 v8 profiler 和 node inspector 这是分析器屏幕的照片 抱歉是照片 不是屏幕截图 只是我的系统真的超载并且没有足够的空间
  • Electron - 如何将 html 文件加载到当前窗口?

    我四处寻找 文档 谷歌等 了解如何在电子应用程序的主窗口中加载 html 文件 但我找不到方法 事情真的这么复杂还是这么简单 我想出的是ajax 因此有效 main load views details html 我发现的另一种方法是通过远
  • 为什么 2 和 4 在 b 之前打印?

    function first return new Promise resolve gt console log 2 resolve 3 console log 4 async function f console log 1 let r
  • 在 vm 脚本上下文中传递函数

    假设我有一个如下所示的库模块 module exports increment function count 我想在动态生成的脚本中使用它 如下所示 function lib increment 通过将其传递到沙箱中 var sandbox
  • 如何在节点中转义 shell 命令的字符串?

    In nodejs http nodejs org 执行外部命令的唯一方法是通过 sys exec cmd 我想调用外部命令并通过标准输入为其提供数据 在nodejs中 似乎还没有一种方法可以打开命令 然后将数据推送到它 仅执行并接收其标准
  • 了解节点插件 API (N-API) HandleScope

    我很难理解如何正确使用手柄范围 https github com nodejs node addon api blob master doc handle scope md and EscapeHandleScope https githu

随机推荐