目录
一、C语言与JavaScript交互
接口设计与调用方式:
1. 定义供JavaScript调用的C函数(导出函数)
2. 在JavaScript中调用WASM模块中的函数
数据类型映射、参数传递、返回值处理:
内存共享与访问:
线性内存模型与共享内存
复杂数据结构的互操作
异步编程与事件处理:
异步调用与事件循环
一、C语言与JavaScript交互
接口设计与调用方式:
1. 定义供JavaScript调用的C函数(导出函数)
在C语言中,要定义可供JavaScript调用的函数,通常需要借助WebAssembly(WASM)技术。WASM是一种低级的二进制格式,能够被现代浏览器原生解析和执行,同时提供了与JavaScript交互的能力。以下是在C代码中定义导出函数的步骤:
编写C源码,定义需要导出的函数。这些函数应遵循WASM的调用约定,通常为extern "C"以避免名称修饰: - extern "C" {
- // 示例:导出一个计算两数之和的函数
- int add(int a, int b) {
- return a + b;
- }
- }
复制代码
使用Emscripten、WASM工具链等编译工具将C源码编译为WASM模块。在编译过程中指定导出函数: - emcc add.c -s EXPORTED_FUNCTIONS='["_add"]' -o add.js
复制代码
这里,_add是添加了下划线前缀的函数名,表示将其导出供JavaScript使用。
2. 在JavaScript中调用WASM模块中的函数
生成的WASM模块通常包含一个JavaScript加载器脚本(如上例中的add.js)。在JavaScript环境中,可以按照以下方式加载WASM模块并调用其中的函数: - // 加载WASM模块
- import init, { _add } from './add.js';
- async function run() {
- // 初始化WASM模块
- await init();
- // 调用C函数
- const result &
复制代码 |