gpt4 book ai didi

javascript - 在 GHCJS 中调用 emscripten 导出的导入

转载 作者:太空狗 更新时间:2023-10-29 15:41:35 26 4
gpt4 key购买 nike

我正在尝试移植 haskell 库 minisat使用 ghcjs 到 JavaScript,以便集成到更大的 haskell-ghcjs 项目中。

minisat 包含几个从 c 库导入的 ffi。我设法使用 emscripten 将 c 库编译为 javascript,并导出了 minisat 所需的函数。到目前为止,还不错。

但是,有几个导入看起来像这样:

foreign import ccall safe minisat_solve::Solver -> Int -> Ptr(Lit)-> IO(Bool)

它导入了一个看起来像这样的函数:

int minisat_solve(minisat_solver *s,int len,minisat_Lit *ps)

我的理解,来自the documentation ,是当 emscripten 导出一个接受或返回指针的函数时,指针变成了 JavaScript 数字类型。

ghcjs documentation建议应该可以通过适本地包装 JavaScript 函数来保留现有的外部导入。然而,ghcjs 将指针类型大致表示为由 JavaScript 对象和数字组成的一对。

我觉得wrapper代码应该大致是

function h$minisat_solve(...){
...
minisat_solve(...)
...
}

function minisat_solve = Module.cwrap('minisat_solve',...,...)

但我对类型不匹配感到困惑。

所以,挑战来了:使用上面的包装器代码作为示例(或反例,如果我完全错了)

最佳答案

指针类型可以与整数相互转换:https://hackage.haskell.org/package/base-4.10.0.0/docs/Foreign-Ptr.html#t:IntPtr .因此,您应该能够使用这些函数将 emscripten 要求的任何格式转换为/从任何格式转换。

关于javascript - 在 GHCJS 中调用 emscripten 导出的导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com