首页 文章
  • 11 votes
     answers
     views

    嵌入时如何使用LuaJIT的ffi模块?

    我正在尝试将LuaJIT嵌入到C应用程序中 . 代码是这样的: #include <lua.h> #include <lualib.h> #include <lauxlib.h> #include <stdlib.h> #include <stdio.h> int barfunc(int foo) { /* a dummy fu...
  • 1 votes
     answers
     views

    luajit ffi实现了一个块终结器

    我正在研究在luajit ffi中包装libcurl . 我的终结者没有被召唤 . local ffi = require("ffi") ffi.cdef [[ typedef struct{} CURL; CURL * curl_easy_init(); void curl_easy_cleanup(CURL *); ]] local CURL_lib = f...
  • 3 votes
     answers
     views

    LuaJit FFI从C函数返回字符串到Lua?

    说我有这个C函数: __declspec(dllexport) const char* GetStr() { static char buff[32] // Fill the buffer with some string here return buff; } 而这个简单的Lua模块: local mymodule = {} local ffi = require...
  • 3 votes
     answers
     views

    从Rust函数返回一个字符串,用FFI调用

    我想让一个解释语言(特别是LuaJIT)调用一个返回字符串的Rust函数 . 在我取消引用指针之前我崩溃了什么 . 我读到Rust字符串不是以null结尾的,所以我使用 to_c_str() 函数来创建一个字符串,但是我认为生命周期在某种程度上会在整个事情中抛出一个扳手,因为我对它们仍然有些模糊 . 锈码: #![crate_type = "dylib"] extern cr...
  • -2 votes
     answers
     views

    慢的FFI.cast在luajit

    你能否在下面的代码片段中解释FFI.cast的低性能? prof = require 'profile' local ffi = require("ffi") ffi.cdef[[ struct message { int field_a; }; ]] function cast_test1() bytes = ffi.new("char[100...
  • 1 votes
     answers
     views

    Luajit ffi如何在time.h中调用函数?

    我尝试以这种方式调用函数 tan math.h (直接复制声明)并且它有效: local ffi = require("ffi") ffi.cdef[[ double tan(double x); ]] print(ffi.C.tan(45)) 但是当我试图以同样的方式调用 time.h 的 localtime 函数时: local ffi = require(&...
  • 2 votes
     answers
     views

    LuaJIT ffi:如何将字符串数组传递给c函数

    我想将存储字符串的Lua表传递给c函数 . 所以,例如,如果我有 tStr = {"String1", "String2", "String3"} 我如何传递给C函数 . 我想我必须打电话给ffi.new但是哪种类型我不确定.. local cVar = ffi.new("??" , tStr) -- I am n...
  • 0 votes
     answers
     views

    luajit ffi - 如何在ffi / luajit中编写指向c函数的指针

    相当于ffi的新手,寻求帮助,通过ffi将这个c / c声明编码为lua . 我读取代码的方式,我有一个函数,指向函数的指针作为传递的参数之一 . 我可能完全错了,我确实说我是新手! 这是typedef: ffi.cdef[[typedef void (* XPLMReceiveMonitorBoundsGlobal_f)( int ...
  • 0 votes
     answers
     views

    麻烦编码ffi / luajit中的void *

    我以为我已经解决了如何在ffi中为luajit编写c指针的代码,例如下面的代码可以根据需要运行: ffi.cdef("void XPLMGetWindowGeometry(XPLMWindowID inWindowID, int * outLeft, int * outTop, int * outRight, int * outBottom)") DONE local wL...
  • 1 votes
     answers
     views

    Python调用带有ctypes的Rust FFI在退出时崩溃,“指针被释放未被分配”

    我正在尝试释放分配给 CString 的内存并使用ctypes传递给Python . 但是,Python崩溃了一个malloc错误: python(30068,0x7fff73f79000) malloc: *** error for object 0x103be2490: pointer being freed was not allocated 这是我用来将指针传递给ctypes的Rust函...
  • 11 votes
     answers
     views

    如何将一个Rust`Vec <T>`暴露给FFI?

    我正在尝试构造一对元素: array: *mut T array_len: usize array 旨在拥有数据 但是,Box::into_raw将返回 *mut [T] . 我找不到有关将原始指针转换为切片的任何信息 . 它在内存中的布局是什么?我如何在C中使用它?我应该转换为 *mut T 吗?如果是这样,怎么样?
  • 1 votes
     answers
     views

    将Rust指针传递给C时,我应该得到0x1吗?

    我看起来像是在堆上 - 当我打印它时我得到了 0x1 : use std::fmt; pub struct SndbDB {} impl SndbDB { fn new() -&gt; SndbDB { SndbDB {} } } impl fmt::Display for SndbDB { fn fmt(&amp;self, f: &amp;mut ...
  • 2 votes
     answers
     views

    从C数组指针创建Rust中的Vec并安全地释放它?

    我正在从Rust调用一个C函数,它将一个空指针作为一个参数,然后分配一些内存来指向它 . 什么是有效(即避免不必要的副本)和安全(即避免内存泄漏或段错误)的正确方法是将数据从C指针转换为 Vec ? 我有类似的东西: extern &quot;C&quot; { // C function that allocates an array of floats fn allocate_...
  • 2 votes
     answers
     views

    如何在不释放缓冲区本身的情况下释放Rust在FFI缓冲区之上分配的所有结构?

    我有一个Java程序,它通过JNA调用Rust,为Rust端提供一个指针,指向一个可能很大(堆分配)的连续布局的缓冲区,\ 0终止的UTF-8字符串 . 内存由Java端拥有,并在垃圾收集器完成关联对象时释放 . 我的目标是通过将其解释为字符串向量来处理该缓冲区,执行我需要做的事情,并删除Rust在缓冲区顶部分配的所有结构,例如, Vec 's, String s等 . 由于缓冲区的潜在大小,...
  • 13 votes
     answers
     views

    从Rust调用动态链接的Haskell代码

    我正在尝试使用一些Haskell代码编译一些Rust代码 . 我有一个测试系统设置了一个文件 Fibonacci.hs ,其函数在Haskell中计算斐波纳契数,并通过Haskell的FFI将函数导出为 fibonacci_hs (如下所示:https://github.com/nh2/haskell-from-python,尽管我将复制并粘贴在底部),并且 wrapper.c 定义了要导出的函数...
  • 5 votes
     answers
     views

    解决Rust FFI中的联合结构

    我有解决c-union结构XEvent的问题 . 我用rust-bindgen生成ffi绑定 . 所有代码都托管在github alxkolm/rust-xlib-record上 . 当我尝试从XEvent结构中提取数据时,麻烦发生在src/main.rs:106行 . let key_event: *mut xlib::XKeyEvent = event.xkey(); println!(&qu...
  • 2 votes
     answers
     views

    Java-Prolog:如何将参数传递给arity 2查询?

    我是Prolog和Java的初学者 . 我试图将我的Prolog程序与Java链接 . 我找到了怎么做here . 但是我不知道如何用arity 2将参数传递给Prolog查询 . 这是我的prolog程序的一部分: male(Jack). male(John). female(Jill). couple(Jack,Jill). parent(Jack,John). parent(Jill,Joh...
  • 25 votes
     answers
     views

    如何将自定义对象文件与Haskell库链接?

    我已经创建了一个Haskell包,它使FFI调用CUDA代码中定义的函数 . 我想在包构建期间将.cu文件编译为对象(.o)文件,并强制链接器将其链接到 . 到目前为止,我试图使用一种技术this question . 我已经定制buildHook到: 运行nvcc 运行默认buildHook 使用nvcc编译代码创建ar库文件 . Setup.hs可用here . 该解决方案在将...
  • 1 votes
     answers
     views

    从Rust FFI检索浮点指针

    Ubuntu 13.04,Rust 0.6 . 我正在尝试使用Rust FFI来操作openblas . 以下代码无法按预期方式工作 . use core::io::println; use core::libc::{c_int, c_float}; use core::vec::raw::to_ptr; extern mod openblas { /* Single precisio...
  • 2 votes
     answers
     views

    针对const指针的Rust FFI签名转换

    我有一个带有函数的C库,在一个不透明的结构上运行,定义如下: Foo* makeFoo(); // create a new Foo Foo* dupFoo(const Foo* orig); // make a duplicate Foo rust-bindgen 创建这些外部定义: pub fn makeFoo() -&gt; *mut Foo; pub fn dupFoo(orig: *F...
  • 0 votes
     answers
     views

    通过FFI调用Rust函数时访问冲突

    正如 Headers 所述,当我尝试在Python中调用以下Rust代码时,我得到了访问冲突 . 这是Rust代码: #![crate_type = &quot;dylib&quot;] extern crate libc; use libc::c_char; use std::ffi::CStr; use std::str; #[repr(C)] pub struct Additional...
  • 3 votes
     answers
     views

    如何使用Ctypes从Rust到Python获取自定义对象列表?

    我试图通过函数调用将一个自定义对象数组从Rust发送到Python: pub struct Item { name: String, description: String, tags: Vec&lt;String&gt; } pub struct SearchResults { count: usize, results: Vec&lt;Item&gt;...
  • 10 votes
     answers
     views

    Haskell Stack和C库

    这可能是this post的副本 . 但它得到的唯一答案对我来说似乎不起作用,所以我在这里发布自己的案例,希望找到一个具体的解决方案 . 我在Linux Ubuntu Trusty上 . 我有一个专有的C库libMyLib.so,位于/ usr / local / lib(包含在LD_LIBRARY_PATH中) . 我用uskell的方式写了这个C库的haskell绑定 . Main.hs: ...
  • 1 votes
     answers
     views

    在Racket中动态创建FFI方法

    我正在尝试通过Racket中的FFI加载С/ Rust / etc功能 . 我想将函数名列表指定为字符串,然后通过一些辅助函数加载它们 . 主要问题是从字符串创建标识符/单词 . 例如,在Rebol中它非常简单: foo: &quot;test1&quot; set to-word (rejoin [foo &quot;_result_data&quot;]) some print test1_r...
  • 5 votes
     answers
     views

    如何编写绑定到需要在Rust中打开文件句柄的C函数?

    我很难 . 但是,现在,我试图为librsync写一个绑定,并且它的一些函数希望你传递一个打开的文件句柄(C中的 FILE* ) . 对于原始类型,'s a straightforward way to pass them into C, (the same for pointers to primitive types). And, to be clear, I' m意识到 libc crat...
  • 2 votes
     answers
     views

    在Rust中移动语义

    我在Rust中包装一个C库,它的许多函数通过指向结构的指针来获取参数,这些结构本身通常具有指向其他结构的指针 . 为了减少开销,我想提供将Rust数据编组的结果缓存到C结构中的能力 . 以下是C库如何期望某些参数的示例: #[repr(C)] struct Foo { x: i32, y: f32 } #[repr(C)] struct Bar { p_foo: *con...
  • 16 votes
     answers
     views

    如何将Rust闭包转换为C风格的回调?

    我正在尝试为一块C API编写一个Rusty包装器 . 我挣扎着一个C构造: typedef bool (*listener_t) (int, int); bool do_it(int x1, int y1, int x2, int y2, listener_t listener) 除非侦听器返回false,否则该函数对一系列数字起作用 . 在那种情况下,它会中止计算 . 我想要一个像这样的Ru...
  • 3 votes
     answers
     views

    C库释放来自Rust的指针

    我想对需要回调的C库执行Rust绑定,并且此回调必须返回一个C风格的 char* 指向C库的指针,然后释放它 . 回调必须在某种意义上暴露给我的库的用户(可能使用闭包),并且我想尽可能方便地提供Rust接口(意味着如果可能的话接受 String 输出) . 但是,C库在尝试使用Rust分配的内存时会抱怨,可能是因为Rust使用了jemalloc而C库使用了malloc . 所以目前我可以看到两个使...
  • 5 votes
     answers
     views

    如何在Rust for C中表示指向数组的指针

    我需要在Rust中使用 extern &quot;C&quot; FFI函数,并希望接受一个固定大小的数组 . C代码传递的内容如下: // C code extern int(*)[4] call_rust_funct(unsigned char (*)[3]); .... unsigned char a[] = { 11, 255, 212 }; int(*p)[4] = call_rus...
  • 1 votes
     answers
     views

    原始指针变为null从Rust传递给C

    我正在尝试从生锈的C函数中检索原始指针,并使用相同的原始指针作为另一个库中另一个C函数的参数 . 当我传递原始指针时,我最终在C端有一个NULL指针 . 我试图制作一个简化版本的问题,但是当我这样做的时候,我的预期就是 - C代码 - struct MyStruct { int value; }; struct MyStruct * get_struct() { struct M...

热门问题