dylib.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package go_zrfu
  2. import (
  3. "github.com/ying32/dylib"
  4. )
  5. const (
  6. PROCNAME_DBG_ON = "ZRFU_Debug_On"
  7. PROCNAME_DBG_OFF = "ZRFU_Debug_Off"
  8. PROCNAME_BV_NEW = "ZRFU_BytesVec_New"
  9. PROCNAME_BV_DEL = "ZRFU_BytesVec_Del"
  10. PROCNAME_BV_LEN = "ZRFU_BytesVec_Len"
  11. PROCNAME_BV_WRITE = "ZRFU_BytesVec_Write"
  12. PROCNAME_BV_READ = "ZRFU_BytesVec_Read"
  13. PROCNAME_PC_INIT = "ZRFU_Proc_Init"
  14. PROCNAME_PC_CALL = "ZRFU_Proc_Call"
  15. )
  16. type ZRFUDyLib struct {
  17. dll *dylib.LazyDLL
  18. procDbgOn *dylib.LazyProc
  19. procDbgOff *dylib.LazyProc
  20. procBVNew *dylib.LazyProc
  21. procBVDel *dylib.LazyProc
  22. procBVLen *dylib.LazyProc
  23. procBVWrite *dylib.LazyProc
  24. procBVRead *dylib.LazyProc
  25. procPCInit *dylib.LazyProc
  26. procPCCall *dylib.LazyProc
  27. }
  28. func LoadDyLib(name string) (*ZRFUDyLib, error) {
  29. dll := dylib.NewLazyDLL(name)
  30. zdl := &ZRFUDyLib{
  31. dll: dll,
  32. procDbgOn: dll.NewProc(PROCNAME_DBG_ON),
  33. procDbgOff: dll.NewProc(PROCNAME_DBG_OFF),
  34. procBVNew: dll.NewProc(PROCNAME_BV_NEW),
  35. procBVDel: dll.NewProc(PROCNAME_BV_DEL),
  36. procBVLen: dll.NewProc(PROCNAME_BV_LEN),
  37. procBVWrite: dll.NewProc(PROCNAME_BV_WRITE),
  38. procBVRead: dll.NewProc(PROCNAME_BV_READ),
  39. procPCInit: dll.NewProc(PROCNAME_PC_INIT),
  40. procPCCall: dll.NewProc(PROCNAME_PC_CALL),
  41. }
  42. return zdl, nil
  43. }
  44. func (l *ZRFUDyLib) SetDebugMode(b bool) {
  45. if b {
  46. _, _, _ = l.procDbgOn.Call()
  47. } else {
  48. _, _, _ = l.procDbgOff.Call()
  49. }
  50. }
  51. func (l *ZRFUDyLib) procCall(proc *dylib.LazyProc, a ...uintptr) (uintptr, error) {
  52. retval, _, _ := proc.Call(a...)
  53. err := CheckRetVal(int32(retval))
  54. if err != nil {
  55. return 0, err
  56. }
  57. return retval, nil
  58. }