首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用GHCJS中emscripten导出的导入

调用GHCJS中emscripten导出的导入
EN

Stack Overflow用户
提问于 2017-10-22 05:26:18
回答 1查看 90关注 0票数 5

我正在尝试使用ghcjs将haskell库minisat移植到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 number类型。

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

我认为包装器代码应该大致是

代码语言:javascript
复制
function h$minisat_solve(...){
   ...
   minisat_solve(...)
   ...
}

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

但是我被类型不匹配给难住了。

因此,这里有一个挑战:解释如何使用上面的包装器代码作为示例(或者反例,如果我完全错误的话),如何正确地包装用于ghcjsccall导入的emscripten导出。

EN

回答 1

Stack Overflow用户

发布于 2017-11-28 11:22:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46868261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档