github.com/notti/go-dynamic@v0.0.0-20190619201224-fc443047424c/steps/3_goffi/prog/main.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"unsafe"
     7  
     8  	"github.com/notti/go-dynamic/steps/3_goffi/ffi"
     9  )
    10  
    11  var puts__dynload uintptr
    12  var test_call__dynload uintptr
    13  
    14  type putsString struct {
    15  	s   []byte
    16  	num int `ffi:"ret"`
    17  }
    18  
    19  type testCall struct {
    20  	i1  uint16
    21  	i2  int
    22  	f1  float32
    23  	f2  float64
    24  	i3  int
    25  	i4  int
    26  	i5  int
    27  	i6  int
    28  	i7  int
    29  	i8  int
    30  	i9  int16
    31  	ret int `ffi:"ret"`
    32  }
    33  
    34  func main() {
    35  	fmt.Println(os.Args) // check if startup works
    36  
    37  	str := "hello world"
    38  	b := append([]byte(str), 0)
    39  
    40  	argsP := &putsString{s: b}
    41  	specP := ffi.MakeSpec(puts__dynload, argsP)
    42  
    43  	fmt.Println(argsP, specP)
    44  	specP.Call(unsafe.Pointer(argsP))
    45  	fmt.Println(argsP)
    46  
    47  	argsT := &testCall{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, -11, 12}
    48  	specT := ffi.MakeSpec(test_call__dynload, argsT)
    49  
    50  	fmt.Println(argsT, specT)
    51  	specT.Call(unsafe.Pointer(argsT))
    52  	fmt.Println(argsT)
    53  }