gitee.com/haifengat/gotap_dipper@v0.0.4-0.20231212021028-041a6fa876e5/generate/quote_lnx.go.tpl (about) 1 package quote 2 3 /* 4 #cgo CPPFLAGS: -fPIC -I./ 5 #cgo linux LDFLAGS: -fPIC -L${SRCDIR} -Wl,-rpath ${SRCDIR} -ltapquote -lstdc++ 6 7 #include "struct_cgo.h" 8 9 void* CreateQuoteAPINotify(); 10 void* CreateQuoteAPI(struct TapAPIApplicationInfo *appInfo); 11 void FreeQuoteAPI(void* api); 12 void* GetQuoteAPIVersion(); 13 int SetQuoteAPIDataPath(char* path); 14 int SetQuoteAPILogLevel(char level); 15 16 // ********************** 调用函数 ****************** 17 [[ range .Fn ]]int q[[ .FuncName ]](void* api[[ range .Params ]],[[ CHeaderBaseType .Type .Name]] [[ .Name ]][[end]]); 18 [[ end ]] 19 20 21 // ********************** 响应函数 ****************** 22 [[ range .On ]]void qSet[[ .FuncName ]](void*, void*); 23 [[ end ]] 24 25 // Onxxx 为go 的 export所用 26 [[ range .On ]]void [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ CHeaderBaseType .Type .Name ]] [[ .Name ]][[end]]); 27 [[ end ]] 28 29 #include <stdlib.h> 30 #include <stdint.h> 31 */ 32 import "C" 33 34 import ( 35 "fmt" 36 "unsafe" 37 ) 38 39 var q *Quote 40 func NewQuote()*Quote{ 41 if q==nil { 42 q = &Quote{} 43 } 44 return q 45 } 46 47 // Quote 行情接口 48 type Quote struct { 49 api, spi unsafe.Pointer 50 // 定义响应函数变量 51 [[ range .On ]][[ .FuncName ]] func([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ DefineVar .Type .Name ]][[end]]) 52 [[ end ]] 53 } 54 55 func (q *Quote) CreateTapQuoteAPINotify() { 56 q.spi = C.CreateQuoteAPINotify() 57 } 58 func (q *Quote) CreateTapQuoteAPI(appInfo *TapAPIApplicationInfo) { 59 q.api = C.CreateQuoteAPI((*C.struct_TapAPIApplicationInfo)(unsafe.Pointer(appInfo))) 60 } 61 func (q *Quote)FreeTapQuoteAPI(api unsafe.Pointer) { 62 C.FreeQuoteAPI(api) 63 } 64 func (q *Quote)GetTapQuoteAPIVersion() string { 65 return C.GoString((*C.char)(C.GetQuoteAPIVersion())) 66 } 67 func (q *Quote) SetTapQuoteAPIDataPath(path string) C.int { 68 return C.SetQuoteAPIDataPath(C.CString(path)) 69 } 70 func (q *Quote) SetTapQuoteAPILogLevel(level byte) C.int { 71 return C.SetQuoteAPILogLevel(C.char(level)) 72 } 73 74 // 替代 SetAPINotify 75 func (q *Quote) SetSpi() { C.qSetAPINotify(q.api, q.spi) } 76 77 // ********************** 调用函数 ****************** 78 [[ range .Fn ]] 79 func (q *Quote) [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]][[ C2Go .Type .Name]][[ end ]]) C.int {return C.q[[ .FuncName ]](q.api[[ range .Params ]], [[ Go2C .Type .Name ]][[ end ]])} 80 [[ end ]] 81 82 // ********************** 响应函数 ****************** 83 func (q *Quote)RegCallBack(){ 84 [[ range .On ]]C.qSet[[ .FuncName ]](q.spi, C.[[ .FuncName ]]) 85 [[ end ]] 86 } 87 88 [[ range .On ]] 89 //export [[ .FuncName ]] 90 func [[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ CCB .Type .Name ]][[end]]){ 91 if q.[[ .FuncName ]] != nil { 92 q.[[ .FuncName ]]([[ range $i,$v := .Params ]][[ if gt $i 0 ]], [[ end ]] [[ cgo .Type .Name ]][[end]]) 93 } else { 94 fmt.Println("[[ .FuncName ]]") 95 } 96 } 97 [[ end ]]