gitee.com/haifengat/gotap_dipper@v0.0.4-0.20231212021028-041a6fa876e5/README.md (about) 1 # gotap 2 3 #### 介绍 4 5 易盛 iTap 北斗星接口 golang 封装 6 7 #### 软件架构 8 9 软件架构说明 10 11 #### 安装教程 12 13 1. 接口下载 14 [](http://www.esunny.com.cn/index.php?a=lists&catid=49) 15 16 #### 使用说明 17 18 1. C++ -> C 19 2. go 调用 C 20 1. 生成器生成 .go 文件 21 2. 复制 .h 文件到 `go` 目录下 22 3. 在 go 目录下, 运行 go run main 23 4. 根据提示修改 .h 文件的内容 24 3. 类型转换 c -> go C 函数返回值转换为 go 变量 25 1. void\* -> string : 返回 地址转换为字串 26 1. C.GoString((\*C.char)(c 的返回函数) 27 4. 类型转换 go -> c go 中的变量传递给 c 函数 28 1. *TAPIINT32 -> *C.int : go 中的变量地址给 c 使用 29 1. (\*C.int)(unsafe.Pointer(res)) 30 2. string -> char\* 31 ```go 32 str := C.CString(IP) 33 C.SetHostAddress(t.api, str, C.ushort(port)) 34 defer C.free(unsafe.Pointer(str)) 35 ``` 36 3. TAPIUINT16 -> C.ushort 37 4. []byte -> char* 38 `(*C.char)(unsafe.Pointer(&bt[0]))` 39 5. 删除多余的 amp; (由&转换造成) 40 5. go 测试 41 1. lib 目录下 42 ```sh 43 g++ -shared -fPIC -Wl,-rpath . -o libtaptrade.so ../c/trade.cpp ../c/trade_fn.cpp libiTapTradeAPI.so 44 ``` 45 2. 复制库 46 `cp ../lib/lib*.so lnx` 47 3. go run main.go 48 6. c++ 测试 49 1. 修改官方 Makefile 50 ```sh 51 # cento 7.8 用以下方法 52 g++ -o demo Demo.cpp trade.cpp SimpleEvent.cpp ./libiTapTradeAPI.so` 53 ``` 54 7. QA 55 1. trade_on.go `previous declaration of ‘OnRtnCombinePosition’ was here` 56 1. 检查是否 .go 文件中的定义与 .h 中的不同 57 1. trade.h 文件中定义的响应, 是否增加了 spi 作为第一个参数. 58 2. [弃]增加 spi 是为了支持多帐号,增加了复杂性,暂`不`支持 59 2. [弃]删除 trade.h 中的响应定义中的 const 60 1. cgo 不支持 const char\* 61 2. const structXXX 等带 const 的类型**不**受影响 62 3. trade_lnx.go 中重新定义 C 的响应函数 63 1. 所有类型转换为 c 的基础类型,不使用自定义类型 64 4. 重新定义所有 struct, 字段类型改为 C 原始类型 65 2. 登录 Login 返回 0,没有收到 OnConnected 响应,却报错:ignal: segmentation fault 66 1. Login 之前,注册 SPI 则会触发异常 67 1. c 返回 spi,用 new Trade(),对 make 时报错的函数先注销掉,确保编译通过