WebAssembly:如何从JavaScript访问C定义的全局常量?
在Wasm中导出C常量与#define宏的可行性
关于const定义的常量
Wasm本身不支持直接导出编译期const常量——这类常量会被编译器直接内联到代码中,不会在Wasm的导出表中生成对应的符号条目。
如果要让JavaScript访问这些常量,有两种实用方案:
- 将常量封装为导出函数,通过函数返回值传递
编译时导出// C代码示例 const int Up = 1; int get_Up() { return Up; }get_Up函数,JavaScript调用该函数即可获取常量值。 - 将常量存入Wasm内存的固定位置,JavaScript直接读取内存
可以把常量放在全局结构体或静态数组中,编译时指定内存布局,JavaScript通过对应的内存地址读取值。
关于#define定义的宏
#define是预处理阶段的文本替换指令,编译完成后宏会完全消失,不会留下任何符号或内存痕迹,无法直接从Wasm导出#define宏。
要让JavaScript获取#define的值,只能通过间接方式:先将#define的值赋值给const变量,或者封装成返回该值的函数,再通过上述const常量的导出方案传递给JavaScript。
内容的提问来源于stack exchange,提问作者Jan Zakrzewski
相关产品推荐
相关产品推荐

