CallBack.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package Core
  2. /*
  3. #cgo CFLAGS: -I../include
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <stddef.h>
  7. #include <string.h>
  8. #include "HCNetSDK.h"
  9. */
  10. import "C"
  11. import "unsafe"
  12. func charPtrToByteSlice(cstr *C.char, dwBufSize DWORD) []byte {
  13. goSlice := C.GoBytes(unsafe.Pointer(cstr), C.int(dwBufSize))
  14. return goSlice
  15. }
  16. var serialCallBackHooks = make(map[LONG]serialDataCallBack)
  17. type serialDataCallBack func(lSerialHandle LONG, lChannel LONG, pRecvDataBuffer []byte, dwBufSize DWORD, pUser unsafe.Pointer)
  18. //export fSerialDataCallBackGo
  19. func fSerialDataCallBackGo(lSerialHandle C.LONG, lChannel C.LONG, pRecvDataBuffer *C.char, dwBufSize C.DWORD, pUser *C.void) {
  20. callback := serialCallBackHooks[LONG(lSerialHandle)]
  21. println(DWORD(dwBufSize))
  22. if callback != nil {
  23. callback(LONG(lSerialHandle), LONG(lChannel), charPtrToByteSlice(pRecvDataBuffer, DWORD(dwBufSize)), DWORD(dwBufSize), unsafe.Pointer(pUser))
  24. }
  25. }
  26. var exceptionCallBackHooks = make(map[int]ExceptionCallBack)
  27. type ExceptionCallBack func(dwType uint32, lUserID int32, lHandle int32, pUser interface{})
  28. //export fExceptionCallBackGo
  29. func fExceptionCallBackGo(dwType C.DWORD, lUserID C.LONG, lHandle C.LONG, pUser *C.void) {
  30. callback := exceptionCallBackHooks[int(lUserID)]
  31. if callback != nil {
  32. callback(uint32(dwType), int32(lUserID), int32(lHandle), pUser)
  33. }
  34. }