123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package go_zrfu
- import (
- "github.com/ying32/dylib"
- )
- const (
- PROCNAME_DBG_ON = "ZRFU_Debug_On"
- PROCNAME_DBG_OFF = "ZRFU_Debug_Off"
- PROCNAME_BV_NEW = "ZRFU_BytesVec_New"
- PROCNAME_BV_DEL = "ZRFU_BytesVec_Del"
- PROCNAME_BV_LEN = "ZRFU_BytesVec_Len"
- PROCNAME_BV_WRITE = "ZRFU_BytesVec_Write"
- PROCNAME_BV_READ = "ZRFU_BytesVec_Read"
- PROCNAME_PC_INIT = "ZRFU_Proc_Init"
- PROCNAME_PC_CALL = "ZRFU_Proc_Call"
- )
- type ZRFUDyLib struct {
- dll *dylib.LazyDLL
- procDbgOn *dylib.LazyProc
- procDbgOff *dylib.LazyProc
- procBVNew *dylib.LazyProc
- procBVDel *dylib.LazyProc
- procBVLen *dylib.LazyProc
- procBVWrite *dylib.LazyProc
- procBVRead *dylib.LazyProc
- procPCInit *dylib.LazyProc
- procPCCall *dylib.LazyProc
- }
- func LoadDyLib(name string) (*ZRFUDyLib, error) {
- dll := dylib.NewLazyDLL(name)
- zdl := &ZRFUDyLib{
- dll: dll,
- procDbgOn: dll.NewProc(PROCNAME_DBG_ON),
- procDbgOff: dll.NewProc(PROCNAME_DBG_OFF),
- procBVNew: dll.NewProc(PROCNAME_BV_NEW),
- procBVDel: dll.NewProc(PROCNAME_BV_DEL),
- procBVLen: dll.NewProc(PROCNAME_BV_LEN),
- procBVWrite: dll.NewProc(PROCNAME_BV_WRITE),
- procBVRead: dll.NewProc(PROCNAME_BV_READ),
- procPCInit: dll.NewProc(PROCNAME_PC_INIT),
- procPCCall: dll.NewProc(PROCNAME_PC_CALL),
- }
- return zdl, nil
- }
- func (l *ZRFUDyLib) SetDebugMode(b bool) {
- if b {
- _, _, _ = l.procDbgOn.Call()
- } else {
- _, _, _ = l.procDbgOff.Call()
- }
- }
- func (l *ZRFUDyLib) procCall(proc *dylib.LazyProc, a ...uintptr) (uintptr, error) {
- retval, _, _ := proc.Call(a...)
- err := CheckRetVal(int32(retval))
- if err != nil {
- return 0, err
- }
- return retval, nil
- }
|