问题标签 [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 投票
2 回答
822 浏览

haskell - 可存储空数据声明

我正在尝试为 C 库创建一个 Haskell 包装器。底层结构过于复杂,无法表示为显式类型,除了在 C 函数之间传递之外,我实际上并没有使用它们,所以我EmptyDataDecls让 GHC 为我解决问题。

我需要的是一个指向这些数据类型之一的指针,但是当我尝试用它创建一个时,alloca它抱怨数据不是 type Storable。例如:

GHC 不会编译这个,说没有Storable Struct. 我可以自己实现它:

但这接近于违背目的 - 如果我不关心结构中的内容,我不想定义这些东西。

我注意到指向指针的指针工作正常,因为Ptr类是Storable. 所以我可以通过在调用之前使用peekon来完成我的目标:ptrget_struct

不过,这感觉像是一种黑客行为。

有没有办法在Storable不定义实例的情况下考虑空数据声明?

0 投票
1 回答
796 浏览

c - 如何选择合适的 Haskell C 类型?

我研究了一些 Haskell 编程语言,现在我发现可以从 C 程序中调用 Haskell 函数。在我学习 Haskell 期间,我用 Haskell 创建了一个词频计数器,我想尝试从 C 程序中调用该函数,但我不知道该怎么做。我在 haskell.org 上找到了这两个网站:

从 C 调用 Haskell

国外 C 类型(Haskell 模块)

尽管如此,我还是有点迷失要使用哪种类型。我的 haskell 程序是以下功能的管道:

putStr 。取消线。映射 testF 。排序树

我自己的功能在哪里

  • testF是 testF 的类型:: Show a => ([Char],a) -> [Char]
  • sortedTreesortedTree :: (Num a, Ord a) => [Char] -> [([Char],a)] 的类型

我很确定我需要将每个函数的类型转换为 C 类型,而不是只转换调用管道的函数。“main”函数的类型是

fileFreq :: [字符] -> IO ()

除此之外,我正在使用 Haskell 二叉树,这不是前奏类型。

这是整个 Haskell 代码:

有人可以指导我吗?

0 投票
6 回答
14278 浏览

python - 从 Python 调用 Haskell 函数

我想使用 Python 中的一些 Haskell 库(例如 Darcs、Pandoc),但似乎在 Python 中没有与 Haskell 直接的外部函数接口。有没有办法做到这一点?

0 投票
1 回答
721 浏览

c - PLT Racket 中的 FFI 与 openCV

我想通过 PLT Racket 控制我的网络摄像头,理想情况下为一些 OpenCV 的 C api 制作一个轻量级包装库。不过,我遇到了一些麻烦,因为我不确定 OpenCV 中的哪些目标文件是库……很尴尬,我知道。我查看了 Python API 是如何工作的,我看到 cv.so 文件中有模块,但我不确定在我的二进制文件中使用什么。我在 Mac OSX 上

我有这个

但我不确定将哪个文件作为“lib-name”传递。在我的 opencv 安装目录中,我有 ../opencv/2.2/lib ,其中包含许多 .dylib 文件。似乎没有一个有效,但它们是迄今为止最好的猜测。我是否需要使用不同的编译器选项构建 OpenCV?

0 投票
5 回答
7996 浏览

ruby - 通过 RVM 在 Ubuntu、Ruby 1.9.2 上安装使用本机扩展的 gem 时出错

尝试安装 ffi gem 时出现错误:

在安装带有本机扩展的 gem 时,我经常遇到各种错误,所以我认为我的 Ubuntu 安装有问题,但我不知道是什么。我将发布您诊断问题所需的任何信息。

编辑:当我 cd 到 ffi gem(在第二行但最后一行中提到)并在第 6 行运行 rake 行时,我得到“找不到 RubyGem rake-compiler”。

在 gem 我 rake-compiler 之后,再次运行 rake,我得到了这个:

更新:

这些是我的 rake gemspecs:

最后一个是 gem 的外观,但 gemspec 与第一个不同,并且不包含可执行文件。不过,复制长文件并不能完全解决问题——我得到了一个找不到 rake 可执行文件的文件。

0 投票
1 回答
488 浏览

c - 关于 wrap 和调用 C 函数

我从这个中文博客http://chenyufei.info/blog/2011-02-28/wrap-c-function-closure-gcc-nested-function/得到这个问题 作者想在c语言中使用闭包,他发现GCC具有嵌套函数(和闭包)的能力。例如:

但这不是常见的解决方案。create_wrap_function 具有固定的函数格式,因为 func_t 限制了格式。

众所周知,Lua 有闭包,也可以调用 C 函数。我想实现的是:我们要调用的函数是 foo1 和 foo2,它们有不同类型的 args 和返回值。

在 C 客户端中,调用如下函数:

在 Do_Lua_Wrap 中,它将 foo1 和 1 传递给 Lua 函数,然后像正常进程一样调用 foo1 函数。然后将 foo2 和一个 char* 和一个 double 值传递给 Lua 函数,然后像正常过程一样调用 foo2 函数。在 Lua 函数中,它可以记录有关FILELINE的信息, 并编写一些有关函数参数的额外日志。

但是我不知道如何在 C 和 Lua 中编写函数 Do_Lua_Wrap,这可能吗?

如果可以的话,你能给我一些建议吗?

0 投票
5 回答
2495 浏览

python - 有没有一种简单的方法来使用 Common Lisp 中的 Python 库?

在编写 Common Lisp 代码时,我真正怀念的一件事是访问 Python 库,包括标准库和第三方模块。CLPython 提供了一个有限的 Python 功能子集,它排除了大多数库的使用,所以这对我来说并不是很有用。我希望能够从 Common Lisp 调用 Python 代码,这样它就可以在 CPython 或 PyPy 等 Python VM 中运行。

0 投票
5 回答
367 浏览

unicode - Smalltalk FFI 调用 OpenDBX 中的 unicode 字符

我需要在数据库(Postgress)中插入一些包含非 ASCII 字符的字符串。这是最小的示例。我在<cdecl: long 'odbx_query' (ulong char* ulong) module: 'opendbx'>. 据我了解,这是一个 FFI 错误,调用甚至没有到达数据库后端,但我不确定。

0 投票
1 回答
1605 浏览

ruby - 如何使用 ruby​​ ffi 在 ruby​​ gem 中调用自定义 c 代码

我想创建一个调用我编写的 ac 函数的 ruby​​ gem。例如:

这将在我的 ruby​​gem 的 ac 文件中。然后我希望能够通过使用 ffi 接口包装它来在 ruby​​ 中调用它:

但是我不确定如何设置它,以便在安装 gem 时 c 文件将编译成一个库(名称为“MyLib”),并且 ffi 将检测该库并在上面的代码中使用它.

有谁知道如何做到这一点,或者有更好的方法吗?请注意,我宁愿不使用扩展 ruby​​ 的标准方式(如 The Pragmatic Programmer's Guide Extending Ruby 部分中所述),因为这只适用于标准 ruby​​ 解释器(我相信)。

如果这对这个问题很重要,我一直在使用珠宝商来制作我的宝石。

0 投票
3 回答
880 浏览

ruby-on-rails - 超时、系统超时和终止符不适用于基于 FFI 的功能

我已经通过 FFI 为共享库函数(第三方函数)编写了一个包装器。此共享库尝试与服务器建立连接。在连接建立期间,当服务器无法访问时,第三方功能等待 3 分钟。为了避免在调用 rails 时出现这种情况,我曾经尝试使用以下超时,但不幸的是它不起作用。

  1. 本机超时
  2. 系统超时
  3. 终结者

注意:当我使用终结者时,由它创建的附加进程变成了已失效的进程。

我正在使用 ruby​​ 企业版 1.8