使用Emscripten从C ++调用JavaScript函数时,奇怪的i64行为:

时间:2019-03-06 09:47:39

标签: javascript c++ emscripten

here所述,我正在尝试调用JavaScript函数foo(),该函数采用64位整数和其他任何类型作为C ++的参数:

// declaration
extern "C" {
    void foo(int64_t a, int32_t b);
}

// call
foo(123456789, 4);

foo.js中,我实现了foo()

mergeInto(LibraryManager.library, {
  foo: function(a, b) {
    console.log(a, b);
  }});

..并通过--js-library foo.js将其“链接”到生成的“二进制文件”(在我的情况下是共享库。

如图所示,当我从C ++调用foo()时,调用了JS实现,但参数已损坏,例如b变为0,而a 似乎没问题(但实际上只有成功传递最大INT_MAX的值)。

当我添加另一个int32_t参数时,我可以看到b的值已被移位 c -因此看起来像{{ 1}}被解释为32位值,而a的后32位被视为a,而b被视为b

c

这是已知行为吗?难道我做错了什么?这是错误吗?

我正在使用EMSDK版本aaaaaaaabbbbcccc <- alignment on stack aaaabbbbcccc <- interpreted alignment on stack

0 个答案:

没有答案