【问题标题】:How to add an own struct_info.json? (emscripten)如何添加自己的 struct_info.json? (授权)
【发布时间】:2016-12-11 22:14:43
【问题描述】:

我想移植一个 C 库。这里有一个非常简短的教程:Interacting with code

我需要使用 javascript 创建一个结构,并返回一个指向它的指针。我查看了已经移植的库。我的代码如下所示:

var ptr = _malloc({{{ C_STRUCTS.MyStruct.__size__ }}});

{{{ makeSetValue('ptr', C_STRUCTS.MyStruct.attr, '0', 'i8') }}};

它不起作用,因为 emscripten 不知道 MyStruct

我的库定义使用--js-library添加到项目中 但我不知道,如何添加结构定义(struct_info.json

在 C 代码中,我有:

struct MyStruct {
    int8_t attr;
    //...
}

【问题讨论】:

  • 我不知道 emscripten 但你不能在 C 中创建一个 createMyStruct 函数并使用它吗?
  • 不幸的是,这不是一个选项。 MyStruct_Create函数必须在js中实现
  • 不是重复的。我想使用像 makeSetValue 这样的 emscripten 宏访问数据,而不是直接处理内存缓冲区
  • @IterAtor 让我直截了当地说:你想导出你的 C 结构对吗?并且能够从 JS 中使用它?您是否尝试过 EMSCRIPTEN_BINDINGS(my_value_example) { value_array("MyStruct") .element(&MyStruct::attr) ... ?

标签: javascript c struct emscripten


【解决方案1】:

你应该创建 C 而不是 JS 结构。例如:

var st_t = new ctypes.StructType("st_t",
        [ { "self": ctypes.PointerType(ctypes.void_t) },
        { "str": ctypes.PointerType(ctypes.char) },
        { "buff_size": ctypes.size_t },
        { "i": ctypes.int },
        { "f": ctypes.float },
        { "c": ctypes.char } ]);  

希望它会有所帮助。

【讨论】:

  • 结构体已经用C定义了,但是JS代码看不到,因为没有提供结构体信息
  • JS 具有定义外部 C 结构的特定功能。
猜你喜欢
  • 1970-01-01
  • 2018-04-03
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
相关资源
最近更新 更多