为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我们不能做一个好的比较?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条经验 获得超4个赞

我不是戈兰程序员,但这里仍然是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 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信