问题标签 [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 - 可存储空数据声明
我正在尝试为 C 库创建一个 Haskell 包装器。底层结构过于复杂,无法表示为显式类型,除了在 C 函数之间传递之外,我实际上并没有使用它们,所以我EmptyDataDecls
让 GHC 为我解决问题。
我需要的是一个指向这些数据类型之一的指针,但是当我尝试用它创建一个时,alloca
它抱怨数据不是 type Storable
。例如:
GHC 不会编译这个,说没有Storable Struct
. 我可以自己实现它:
但这接近于违背目的 - 如果我不关心结构中的内容,我不想定义这些东西。
我注意到指向指针的指针工作正常,因为Ptr
类是Storable
. 所以我可以通过在调用之前使用peek
on来完成我的目标:ptr
get_struct
不过,这感觉像是一种黑客行为。
有没有办法在Storable
不定义实例的情况下考虑空数据声明?
c - 如何选择合适的 Haskell C 类型?
我研究了一些 Haskell 编程语言,现在我发现可以从 C 程序中调用 Haskell 函数。在我学习 Haskell 期间,我用 Haskell 创建了一个词频计数器,我想尝试从 C 程序中调用该函数,但我不知道该怎么做。我在 haskell.org 上找到了这两个网站:
尽管如此,我还是有点迷失要使用哪种类型。我的 haskell 程序是以下功能的管道:
putStr 。取消线。映射 testF 。排序树
我自己的功能在哪里
- testF是 testF 的类型:: Show a => ([Char],a) -> [Char]
- sortedTree是sortedTree :: (Num a, Ord a) => [Char] -> [([Char],a)] 的类型
我很确定我需要将每个函数的类型转换为 C 类型,而不是只转换调用管道的函数。“main”函数的类型是
fileFreq :: [字符] -> IO ()
除此之外,我正在使用 Haskell 二叉树,这不是前奏类型。
这是整个 Haskell 代码:
有人可以指导我吗?
python - 从 Python 调用 Haskell 函数
我想使用 Python 中的一些 Haskell 库(例如 Darcs、Pandoc),但似乎在 Python 中没有与 Haskell 直接的外部函数接口。有没有办法做到这一点?
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?
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 可执行文件的文件。
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 函数中,它可以记录有关FILE和LINE的信息, 并编写一些有关函数参数的额外日志。
但是我不知道如何在 C 和 Lua 中编写函数 Do_Lua_Wrap,这可能吗?
如果可以的话,你能给我一些建议吗?
python - 有没有一种简单的方法来使用 Common Lisp 中的 Python 库?
在编写 Common Lisp 代码时,我真正怀念的一件事是访问 Python 库,包括标准库和第三方模块。CLPython 提供了一个有限的 Python 功能子集,它排除了大多数库的使用,所以这对我来说并不是很有用。我希望能够从 Common Lisp 调用 Python 代码,这样它就可以在 CPython 或 PyPy 等 Python VM 中运行。
unicode - Smalltalk FFI 调用 OpenDBX 中的 unicode 字符
我需要在数据库(Postgress)中插入一些包含非 ASCII 字符的字符串。这是最小的示例。我在<cdecl: long 'odbx_query' (ulong char* ulong) module: 'opendbx'>
. 据我了解,这是一个 FFI 错误,调用甚至没有到达数据库后端,但我不确定。
ruby - 如何使用 ruby ffi 在 ruby gem 中调用自定义 c 代码
我想创建一个调用我编写的 ac 函数的 ruby gem。例如:
这将在我的 rubygem 的 ac 文件中。然后我希望能够通过使用 ffi 接口包装它来在 ruby 中调用它:
但是我不确定如何设置它,以便在安装 gem 时 c 文件将编译成一个库(名称为“MyLib”),并且 ffi 将检测该库并在上面的代码中使用它.
有谁知道如何做到这一点,或者有更好的方法吗?请注意,我宁愿不使用扩展 ruby 的标准方式(如 The Pragmatic Programmer's Guide Extending Ruby 部分中所述),因为这只适用于标准 ruby 解释器(我相信)。
如果这对这个问题很重要,我一直在使用珠宝商来制作我的宝石。
ruby-on-rails - 超时、系统超时和终止符不适用于基于 FFI 的功能
我已经通过 FFI 为共享库函数(第三方函数)编写了一个包装器。此共享库尝试与服务器建立连接。在连接建立期间,当服务器无法访问时,第三方功能等待 3 分钟。为了避免在调用 rails 时出现这种情况,我曾经尝试使用以下超时,但不幸的是它不起作用。
- 本机超时
- 系统超时
- 终结者
注意:当我使用终结者时,由它创建的附加进程变成了已失效的进程。
我正在使用 ruby 企业版 1.8