Emscripten:将struct指针作为Argument传递

时间:2012-09-29 10:43:21

标签: javascript malloc emscripten

我想为emscripten分配一个结构,并使用ccall将其传递给一个函数。 c结构如下所示:

typedef  float HPDF_REAL;
typedef  struct  _HPDF_Point {
  HPDF_REAL  x;
  HPDF_REAL  y;
} HPDF_Point;

所以我在Javascript中分配两个浮点数并将其作为参数传递

struct_ptr = Module['allocate']([123,321], 'float', ALLOC_NORMAL)
res = Module['ccall']('HPDF_Page_GetCurrentTextPos', 'number', ['number', 'number'], [page_ptr, struct_ptr])

但是当我得到结果的结构数据时

FLOAT_SIZE = 4
point = {
  x: getValue(struct_ptr, 'float')
  y: getValue(struct_ptr+FLOAT_SIZE, 'float')
}

我的分配内存未被触及,仍然是point.x==123point.y==321

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

首先,allocate()是一个内部函数 - 正如文档所说(参见函数定义上方的注释),使用起来很棘手,不推荐使用。相反,最好只使用_malloc来分配一些空间,并使用setValue写入它。

其次,确保您的C函数将结构作为指针而不是引用(C ++可以执行)。将函数粘贴到此处(原始C和已编译的JS),以便我们可以帮助您,或在其中添加调试语句以查看发生的情况。