亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們不能做一個好的比較?ruby-ffi 調用 golang(所以文件)

為什么我們不能做一個好的比較?ruby-ffi 調用 golang(所以文件)

藍山帝景 2022-09-12 16:20:55
我正在調用戈朗從紅寶石ffi創建的共享文件。但是,當我單獨運行Golang時,該過程可以正常工作,但是當我通過ruby-ffi運行它時,比較不起作用。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下面是一個可能出錯的示例。首先,創建一個 go 構建并加載它。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我不知道這是什么原因,我需要你的幫助。還有什么我應該嘗試的嗎?
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

我不是戈蘭程序員,但這里仍然是FFI Gem文檔中的引用


:string應該被認為是,并且只要庫訪問Ruby字符串,就不能更改它。如果字符串緩沖區應從 C 端或 Ruby 端修改,請改用 and。const char *:pointerFFI::MemoryPointer


因此,應作為參數傳遞并返回相同類型的值,而不是 。*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"))))

}


查看完整回答
反對 回復 2022-09-12
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號