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 +