ffi

    1热度

    1回答

    对于使用FFI封装C代码的代码(通常为包装箱), 如何使Rust定义和C头保持同步?或确保他们匹配开始? 是否有工具可以处理这个问题,还是每个开发人员都有责任手动检查? 更新:使这更具体。 有没有办法知道什么时候: 结构的成员改变了它的类型。 函数参数更改其类型。 因此,与Rust代码的任何不匹配都可能会警告或无法完全编译? 我遇到了一个崩溃中,我怀疑是由保持的报道,但不固定的API不匹配造成一个

    6热度

    1回答

    我需要在FFI中传递Vec元素。试验中,我遇到了一些有趣的观点。我开始给所有FFI 3:ptr,len和capacity这样我就可以重建Vec后销毁它: let ptr = vec.as_mut_ptr(); let len = vec.len(); let cap = vec.capacity(); mem::forget(vec); extern_fn(ptr, len, cap);

    2热度

    1回答

    我想将用于存储字符串的Lua表传递给c函数。因此,例如,如果我有 tStr = {"String1", "String2", "String3"} 如何传递给C函数。我觉得我有打电话给ffi.new但我什么类型的不知道.. local cVar = ffi.new("??" , tStr) -- I am not sure what to pass as type 参数 此外,在C功能,我

    3热度

    1回答

    我正在查看JS的一些文档,它使用字符串作为临时'枚举'。在我的应用程序中将它表示为代数数据类型ADT会更好一些;然而,我不确定在外部函数接口FFI的对象上使用这个ADT到String的最好方法是什么。鉴于概念: data Foo = Bar | Baz type Qux = { foo :: Foo } foreign import quux :: forall e. Qux -> Eff

    3热度

    1回答

    好的,所以我是Perl和Perl 6的新手。我想我会看看如果我能分叉和滚边工作,但到目前为止无法。这里是我的Perl 6的代码: use NativeCall; # http://www.perlmonks.org/?node_id=989766 our sub c_close(int32) returns int32 is native is symbol('close') { * }

    7热度

    3回答

    我正在为现有库(用C语言编写)编写一个FFI接口。 该库使用了大量的不透明结构,因此我定义了几个ExternalStructures(没有字段)用作void*。 现在,我已经看到了与库接口的两种方式(或四个): 有每个导出函数的方法的ExternalLibrary:这可能会在实例类的方法,然后用单身模式有一个单一的实例。或实现与“更加复杂”语法包括在FFI编译的moduleName像在类侧的方法:

    1热度

    1回答

    我一直在尝试从Pony Language的FFI调用Window的CreateProcessA。 我创建了一个C和一个PonyLang的例子。 C示例很好: #include <windows.h> #include <stdio.h> #include <tchar.h> void wmain(void) { STARTUPINFO info={0}; PROCESS

    9热度

    1回答

    对于以下每个线程局部存储实现,如何在Rust程序中使用标准ffi机制(由编译器或标准库公开)访问外部线程局部变量? C11 gcc的TLS扩展 并行线程 的Windows API TLS

    1热度

    2回答

    我尝试使用FFI编写一些Rust代码,它涉及让C取得一些本地创建的结构的所有权。 fn some_function() { let c = SomeStruct::new(); unsafe { c_function(&mut c); } } 我想c_function采取局部struct c的所有权。在C++中,可以通过release获得unqiue

    2热度

    1回答

    当我开始学习Rust的时候,我天真地认为Rust的特性指针像C++指针一样被实现,并且编写了一些甚至在这个假设下也能工作的代码。具体来说,我写的代码接口与需要阅读和寻求流的FFI库,它是这样的: struct StreamParts { reader: *mut Read, seeker: *mut Seek, } fn new_ffi_object<T: Read +