IT评测·应用市场-qidao123.com

标题: electron 上怎么用node 调用 c++ 提供的方法 [打印本页]

作者: 用多少眼泪才能让你相信    时间: 2025-1-12 11:55
标题: electron 上怎么用node 调用 c++ 提供的方法
背景

在 Electron 上调用 C++ 代码的场景紧张出现在需要实行高性能、低耽误的使命,大概需要与现有的本地 C++ 库集成时。这些场景往往涉及底层体系交互、性能优化或跨平台兼容性需求。
我们都知道c++ 的性能和安全性都比JavaScript 要高,但我以为在 Electron 中调用 C++ 代码是一种强大的技术,但仅在以下情况下才值得考虑:
调用方法

WebAssembly

  1. #include <iostream>
  2. extern "C"
  3. {
  4.   int add(int a, int b)
  5.   {
  6.     return a + b;
  7.   }
  8. }
复制代码
假设我们有这样一个 c++ 提供的方法,用于盘算两个整数的和,我们可以用过下令 emcc add.cpp -s WASM=1 -s EXPORTED_FUNCTIONS="['_add']" -o add.js 进行编译,就能得到一个 add.wasm 文件了。
然后我们就可以通过 fs 中的 readFileSync 方法来读取啦。
  1. const source = fs.readFileSync('src/cpp/add.wasm')
  2. WebAssembly.instantiate(source).then(({ instance }) => {
  3.   const exports = instance.exports
  4.   console.log(exports)
  5.   const result = exports.add(10, 2)
  6.   console.log(result) // 输出: 12
  7. })
复制代码
输出就如下啦:

在 Node.js 中,WebAssembly 是一个内置功能,你可以直接在全局变量下利用 WebAssembly,不需要额外导入。Node.js 版本 8 及更高版本都支持 WebAssembly
     
    总结
下令 emcc add.cpp -s WASM=1 -s EXPORTED_FUNCTIONS="['_add']" -o add.js 的整体作用是:
  
  通过子进程调用

  1. #include <iostream>
  2. int main() {
  3.     std::cout << "Hello from C++!" << std::endl;
  4.     return 0;
  5. }
复制代码
  1. import { execFile } from 'child_process'
  2. execFile('/my-app/src/cpp/hello',
  3.   (error, stdout, stderr) => {
  4.     if (error) {
  5.       console.error(`Error: ${error.message}`)
  6.       return
  7.     }
  8.     if (stderr) {
  9.       console.error(`Stderr: ${stderr}`)
  10.       return
  11.     }
  12.     console.log(`Output: ${stdout}`)
  13.   }
  14. )
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4