问题标签 [ffi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 将 LIRC 与 Haskell 连接
我一直在使用pyLirc在 Python 中制作一个小型应用程序的原型。出于性能原因(除其他外),我正在迁移到 Haskell,但找不到任何提供类似功能的模块。我应该坚持使用“lirc_client.h”还是有其他选择?
unicode - 如何找到 LC_XXX 区域设置整数常量的值,以便我可以将它们与 cffi 一起使用
我有这个代码:
我想做:
如何找到各种 LC_xxx 常量的整数值,以便将它们传递给上面的调用?有没有更好的方法来实现这一目标?
macos - OSX,ghci,dylib,正确的方法是什么?
我需要构建一些 C 代码,然后通过 FFI 引用该 C 代码。我想在 osx 的 ghci 内部使用我的绑定。我的一个限制是我不能只将 C 源代码交给 .cabal 文件中的 ghc。这是由于 ghc/cabal 的限制可能会在 ghc 的下一个版本中修复(但我希望我的代码现在可以在旧版本上工作)。有关详细信息,请参阅此错误。
该错误的要点是 C 代码需要使用一些 Objective-C 模块进行编译,而 ghc 将它们误解为链接器脚本。我已经尝试了很多事情,并且使用makefile自己构建文件是唯一有效的方法。真的,这不应该是一个问题,因为它应该与我决定使用我没有自己构建的外部 C 库一样。为了解决这个问题,让我们假设它是一个单独的 C 库,我可以使用不同的选项轻松地重建它。
如果我将 C 库构建为 .a,则 ghci 抱怨它无法打开 .dylib。我的第一个问题是:为什么 ghci 需要一个 .dylib 并且它真的使用它吗?
当我构建 dylib时,将代码加载到 ghci 时出现段错误。
请记住,这个绑定已经在其他平台上工作,包括 linux 和 windows,当我编译而不是使用 ghci 时,绑定在 osx 上工作正常。此问题特定于 osx/ghci 组合。
在上面的那个跟踪中,我正在使用 gdb,但无论我是否使用 gdb,它都会崩溃。我将其追踪到导致崩溃的行:
麻烦制造者是 memset 行,实际上问题是在 ghci 内部运行时写入提示结构_glfwLibrary
是内存访问冲突。提示结构只是一堆整数。它非常平坦和简单,因此我认为问题出在我如何链接事物或 ghci 加载代码的方式上。
以下是我用来构建 dylib 和 .a 的 makefile 的一些内容:
大多数标志直接取自 GLFW Makefile,所以我认为它们对于该库应该是正确的。
第一行看起来有点奇怪,但这是我用来解决这个问题的解决方案。
平台详情:
- OSX 10.6.6
- x86_64
- 4核
- 通过 Haskell 平台安装程序安装的 GHC 版本 7.0.3
- 源码仓库:https ://github.com/dagit/GLFW-b
编辑:这是我的问题:
- 这应该与 ghci 一起使用吗?
- 如果是这样,我做错了什么或如何修复崩溃?
- 我可以通过 ghci 使用静态 .a 版本的库吗?
haskell - Haskell FFI:顶级 FunPtr 到顶级函数?
似乎希望只为顶级函数创建一次 FunPtr,而不是在需要时创建一个新函数(针对同一函数)并处理其释放。
我是否忽略了获取 FunPtr 的其他方法foreign import ccall "wrapper"
?如果没有,我的解决方法将如下面的代码所示。那安全吗?
编辑:已验证“每次都创建一个新”变体 ( main = forever (mkSomeCallback f)
) 实际上会泄漏内存,如果没有的freeHaskellFunPtr
话。
haskell - 向量 (Vector Foo) -> (Ptr (Ptr Foo) -> IO a) -> IO a?
我正在为需要将向量列表传递给它的 ac 库制作一个简单的包装器。它需要一个指向数组的指针数组。为了制作一个漂亮的界面,我想要 Vectors 的 Vector(或列表),但我真的不知道如何在惯用的 haskell 中做到这一点。(或者除了记忆复制东西之外的任何其他方式)。
我正在寻找的是类似的东西
haskell - 在 Haskell 中使用 FFI 联合和类型**?
我需要知道如何使用 FFI 解决 Unions 和 Type**(例如 int**)?我知道我需要一个可存储的结构实例,我也可以将它用于联合吗?
像这样的工会:
这通常在 Haskell 中表示为:
我的问题是你将如何将 myUnion 编组(定义一个可存储实例)到 my_union 中?我的理解是实例 my_union 会占用内存中的 sizeof(int) 个字节,即它的最大成员的大小。因此,为了存储它,我们将按照以下方式编写一些内容:
另外,您如何代表int**
FFI?当我得到一个像int foo(int i1, int* i2);
签名这样的函数时:foo -> CInt -> Ptr CInt -> CInt
但如果有:int foo(int i1, int** i2);
c# - 在 C# 中使用高阶 Haskell 类型
如何使用和调用来自 C# (DLLImport) 的具有高阶类型签名的 Haskell 函数,例如...
C#中对应的类型签名是什么?
另外(因为它可能更容易):如何在 C# 中使用“未知”Haskell 类型,所以我至少可以在 C# 不知道任何特定类型的情况下传递它们?我需要知道的最重要的功能是传递一个类型类(如 Monad 或 Arrow)。
我已经知道如何将 Haskell 库编译为 DLL并在 C# 中使用,但仅限于一阶函数。我也知道Stackoverflow - 在 .NET 中调用 Haskell 函数,为什么 GHC 不适用于 .NET和hs-dotnet,我没有找到任何文档和示例(从 C# 到 Haskell 方向)。
opengl - 如何在 Haskell 中调用 Ptr GLubyte -> IO() 类型的函数
在 OpenGL Raw 库中有以下函数:
这个函数的 C 对应物接受一个指向数组的指针,但是我如何在 Haskell 程序中用数组/列表调用这个函数呢?
ruby - 为什么不安装 Google 的 Cityhash gem?
我正在尝试使用 Ruby 的 FFI 附加到 Google cityhash gem;它是一个 64 位和 128 位的非加密散列,类似于默认的 Ruby 散列函数 (murmur_hash 1),但更新了一点,更重要的是,它允许在散列上设置种子。
我在我的 Mac 上安装了 cityhash 以/usr/local/lib
使用默认值。./configure
这将一些库放置在/usr/local/lib
:
我正在使用 Mac OS X。gcc 版本是 4.6,这不是默认的 Mac gcc,但我也尝试过。
ffi(在mac上安装了默认gcc,gcc 4.6不起作用?)
我做了我能做的最简单的模块:
但是当我尝试将此模块包含到任何 Ruby 类或脚本文件中时,我得到了错误:
CityHash64 在 city.h 中有签名:
我将不胜感激有关如何调试此问题的任何见解。
c - 如何调用函数glMultiDrawElements :: GLenum -> GHC.Ptr.Ptr GLsizei -> GLenum -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO()
ffunctionglMultiDrawElements
需要一个指向指针的指针作为其参数之一。如何Ptr(Ptr a)
从 StorableArray Int获得 a a
?