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 时报错的函数先注销掉,确保编译通过