问题标签 [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.

0 投票
1 回答
134 浏览

haskell - 将 LIRC 与 Haskell 连接

我一直在使用pyLirc在 Python 中制作一个小型应用程序的原型。出于性能原因(除其他外),我正在迁移到 Haskell,但找不到任何提供类似功能的模块。我应该坚持使用“lirc_client.h”还是有其他选择?

0 投票
2 回答
141 浏览

unicode - 如何找到 LC_XXX 区域设置整数常量的值,以便我可以将它们与 cffi 一起使用

我有这个代码:

我想做:

如何找到各种 LC_xxx 常量的整数值,以便将它们传递给上面的调用?有没有更好的方法来实现这一目标?

0 投票
1 回答
2124 浏览

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,所以我认为它们对于该库应该是正确的。

第一行看起来有点奇怪,但这是我用来解决这个问题的解决方案。

平台详情:

编辑:这是我的问题:

  • 这应该与 ghci 一起使用吗?
  • 如果是这样,我做错了什么或如何修复崩溃?
  • 我可以通过 ghci 使用静态 .a 版本的库吗?
0 投票
1 回答
322 浏览

haskell - Haskell FFI:顶级 FunPtr 到顶级函数?

似乎希望只为顶级函数创建一次 FunPtr,而不是在需要时创建一个新函数(针对同一函数)并处理其释放。

我是否忽略了获取 FunPtr 的其他方法foreign import ccall "wrapper"?如果没有,我的解决方法将如下面的代码所示。那安全吗?

编辑:已验证“每次都创建一个新”变体 ( main = forever (mkSomeCallback f)) 实际上会泄漏内存,如果没有的freeHaskellFunPtr话。

0 投票
2 回答
394 浏览

haskell - 向量 (Vector Foo) -> (Ptr (Ptr Foo) -> IO a) -> IO a?

我正在为需要将向量列表传递给它的 ac 库制作一个简单的包装器。它需要一个指向数组的指针数组。为了制作一个漂亮的界面,我想要 Vectors 的 Vector(或列表),但我真的不知道如何在惯用的 haskell 中做到这一点。(或者除了记忆复制东西之外的任何其他方式)。

我正在寻找的是类似的东西

0 投票
3 回答
710 浏览

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);

0 投票
3 回答
2073 浏览

c# - 在 C# 中使用高阶 Haskell 类型

如何使用和调用来自 C# (DLLImport) 的具有高阶类型签名的 Haskell 函数,例如...

C#中对应的类型签名是什么?

另外(因为它可能更容易):如何在 C# 中使用“未知”Haskell 类型,所以我至少可以在 C# 不知道任何特定类型的情况下传递它们?我需要知道的最重要的功能是传递一个类型类(如 Monad 或 Arrow)。

我已经知道如何将 Haskell 库编译为 DLL并在 C# 中使用,但仅限于一阶函数。我也知道Stackoverflow - 在 .NET 中调用 Haskell 函数为什么 GHC 不适用于 .NEThs-dotnet,我没有找到任何文档和示例(从 C# 到 Haskell 方向)。

0 投票
2 回答
254 浏览

opengl - 如何在 Haskell 中调用 Ptr GLubyte -> IO() 类型的函数

在 OpenGL Raw 库中有以下函数:

这个函数的 C 对应物接受一个指向数组的指针,但是我如何在 Haskell 程序中用数组/列表调用这个函数呢?

0 投票
1 回答
736 浏览

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 中有签名:

我将不胜感激有关如何调试此问题的任何见解。

0 投票
1 回答
207 浏览

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