我有一个C函数,它接受回调并在另一个线程上调用它:
void call_in_new_thread(void (*callback)()) {
// spawn a new thread and call `callback` in it ...
}
我想通过Node从JavaScript调用这个函数,并将一个JavaScript函数传递给它:
var callbackType = 'pointer'
var lib = ffi.Library('mylib', {
'call_in_new_thread': [ 'voi
如果直接使用Node.js,我可以获得正确的本机内存地址,例如:
// eg. native dll writen in rust; Of course, this part can be implemented in C or C++ or any others.
#[no_mangle]
pub unsafe extern fn example_concat(
a: *const c_char,
b: *const c_char
) -> *mut c_char
{
let sa = CStr::from_ptr(a).to_str().expect("canno
我想通过LuaRocks安装库,以便从dlls访问函数。不幸的是,我没有找到二进制文件,所以我想我需要在我的计算机上编译一个ffi库。在用谷歌搜索了很长一段时间后,我发现了Alien库,所以我想通过命令luarocks install alien安装它。然后我收到一条消息:
Installing https://luarocks.org/alien-0.7.1-2.src.rock
Error: Could not find library file for FFI
No file ffi.lib in c:/external/lib
No file ffi.dll in c:/ex
假设我有两个需要一起工作的库。一个库有一个函数,它接受在另一个库中构建的类型。
此外,假设我为这两个库中的每个库创建了两个独立的FFI接口。
现在,对于每个单独的库,所有东西都可以正常工作,但是当我将内置在一个ffi中的对象类型传递给另一个ffi时,我会得到以下错误:
TypeError: initializer for ctype 'Foo *' appears indeed to be 'Foo *', but the types are different (check that you are not e.g. mixing up different f
使用LuaJIT的ffi.load可以同时加载多个库吗? 像这样的东西能工作吗? local ffi = require("ffi")
local bor = require("bit").bor
ffi.cdef([[
// C bindings from each library!
]])
return ffi.load(bor("lib1", "lib2", "lib3"))
我正在使用JNR并尝试传递一个具有以下C等价签名的回调函数:
int fn(void const*, void const**, void**)
转换成一些C函数。我在Java端声明了嵌套在JNR库接口中的回调为:
public static interface Fn {
@Delegate public int call(Pointer a, Pointer[] b, Pointer[] c);
}
使用JNR库接口中的另一个函数
public int doSomething(Fn fn);
在接受int(*)(void const*, void const**, void**)的C代码
我隐约记得我在某处读到过,只有在第一次调用ffi.load时才加载库,在进程的生命周期内对该函数的后续调用基本上都是无操作的。有什么方法可以验证这一点吗?
local ffi = ffi.require("ffi")
local _M = {
lib = nil
}
function _M.load_library(path)
_M.lib = ffi.load(path)
end
问题是从Ruby访问G-WAN C API
所以我尝试使用FFI,但gwan没有任何库,当我尝试加载二进制文件时,它显示:
/home/asd/.gem/ruby/2.0.0/gems/ffi-1.9.0/lib/ffi/library.rb:123:in `block in ffi_lib': Could not open library '/home/asd/bin/gwan_linux32-bit/gwan': /home/asd/bin/gwan_linux32-bit/gwan: cannot dynamically load executable (Load
我正在写一个小的跨平台的C库来做几何计算。我想在ruby中使用这个库,因为它比原生ruby快大约5倍。
它在Linux (Fedora 20)上运行良好,但当在Windows 8上执行相同的操作时,它会失败,并显示以下错误:
C:/Ruby193/lib/ruby/gems/1.9.1/gems/ffi-1.9.3-x86-mingw32/lib/ffi/library.rb:133:in `block in ffi_lib': Could not open library 'libgeom': x▒K. (LoadError) Could not open libra
我想设置一个项目,以获取我的.hs代码和主.c程序,并通过使用LLVM编译器生成一个静态链接的可执行文件。我可以通过ghc命令行选项来构建.hs、生成存根,并完全使用ghc编译和链接驱动程序应用程序。但是,我在Xcode中遇到了各种问题。
我的第一个问题是,我当然需要在Xcode中使用32位编译环境。这个问题解决了,我不得不摆弄路径来显式地包含HsFFI.h。这个问题解决了,我得到了一个链接器错误:
Ld "build/Debug/FFI Test.app/Contents/MacOS/FFI Test" normal i386
cd "/Users/rcl/T
我正在使用非常棒的库来访问ruby中的c库中的函数。
有没有一种方法可以迭代Ruby FFI::Struct的布局?
示例FFI::Struct:
class Example < FFI::Struct
layout :name, string,
:desc, :string,
:type, :int,
:value, :string
end
这似乎不起作用,但类似于下面的伪代码:
example_struct.each_key do |key|
puts key
end
我想使用ffi gem在Ruby2.0中加载一个自定义的C++函数。当在irb会话中加载我的定制库时,我在attach_function调用期间得到一个错误:
FFI::NotFoundError: Function 'add' not found in [/usr/local/lib/libbridge.so]
下面是我创建和检查libbridge共享对象的方法:
我得到了我的库的头文件:
文件: bridge.h .h
std::string fooBar(std::string bar);
int add(int a, int b);
库实现:
文件: bridge.cp