tx.go 731 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package x
  2. /*
  3. #include "tx.h"
  4. void cb(); // C99定义,通过 C. 使用,不能有参数和返回值
  5. */
  6. import "C"
  7. import (
  8. "log"
  9. "os"
  10. "unsafe"
  11. "github.com/wecisecode/util/cast"
  12. )
  13. // go 实现导出C99,在 .c 中使用
  14. //
  15. //export cb
  16. func cb() {
  17. log.Println("run callback")
  18. }
  19. //export goputs
  20. func goputs(s string) int {
  21. log.Println("go:", s)
  22. return 0
  23. }
  24. func init() {
  25. log.SetOutput(os.Stdout)
  26. log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
  27. }
  28. func run() {
  29. log.Println("run begin")
  30. log.Println("getNumber", cast.ToString(int(C.getNumber())))
  31. log.Println("getString", cast.ToString(C.GoString(C.getString())))
  32. C.callback((C.f_ptr)(unsafe.Pointer(C.cb)))
  33. log.Println("run end")
  34. }
  35. func Run() {
  36. run()
  37. }