我正在調(diào)用戈朗從紅寶石ffi創(chuàng)建的共享文件。但是,當(dāng)我單獨(dú)運(yùn)行Golang時(shí),該過程可以正常工作,但是當(dāng)我通過ruby-ffi運(yùn)行它時(shí),比較不起作用。package mainimport ( "C" "fmt")//export zen_roma_to_han_romafunc zen_roma_to_han_roma(s string) string { if s=="test" { return "10" } return s}func main(){ fmt.Println(zen_roma_to_han_roma("test"))}$ go run replace.go 10下面是一個(gè)可能出錯(cuò)的示例。首先,創(chuàng)建一個(gè) go 構(gòu)建并加載它。go build -buildmode=c-shared -o replace.so replace.go module Sample extend FFI::Library ffi_lib 'replace.so' attach_function :zen_roma_to_han_roma, [:string], :stringend[5] pry(main)> Sample.zen_roma_to_han_roma("test")=> "test我不知道這是什么原因,我需要你的幫助。還有什么我應(yīng)該嘗試的嗎?
1 回答

收到一只叮咚
TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
我不是戈蘭程序員,但這里仍然是FFI Gem文檔中的引用
:string應(yīng)該被認(rèn)為是,并且只要庫訪問Ruby字符串,就不能更改它。如果字符串緩沖區(qū)應(yīng)從 C 端或 Ruby 端修改,請改用 and。const char *:pointerFFI::MemoryPointer
因此,應(yīng)作為參數(shù)傳遞并返回相同類型的值,而不是 。*C.charstring
package main
import (
"C"
"fmt"
)
//export zen_roma_to_han_roma
func zen_roma_to_han_roma(s *C.char) *C.char {
test_string := C.GoString(s)
if test_string == "test" {
return C.CString("10")
}
return s
}
func main() {
fmt.Println(C.GoString(zen_roma_to_han_roma(C.CString("test"))))
}
添加回答
舉報(bào)
0/150
提交
取消