**前面有搜寻过这篇文章[超级链接]https://studygolang.com/topics/11167**
**但是发现传float(float32)的时候正常,但在传double(float64)时,dll那边都还是收到0.00000**
**我用c++写个sample的去调用dll的话也是正常的**
**下面是我的code,不知道哪里出了问题, 版本是`go1.15.2`**
**`tempPara` 是要传入`syscall.Syscall`的`uintptr`,`element.ParamValue`是字串 (ex. 1.23232)**
```go
tempVar, err := strconv.ParseFloat(element.ParamValue, 64)
if err != nil {
Log("string to double transform error: ", err)
//Log(conn.RemoteAddr().String(), " connection error: ", "")
return err
}
var tempDouble uint64 = math.Float64bits((float64)(tempVar))
tempPara = uintptr(tempDouble)
```
**C這邊也只是單純印出來而已**
```c++
void passDouble(double nLen)
{
printf("> src double: %f\n", nLen);
}
```
**有哪位高手能帮忙看看吗? 谢谢** :pray:
我刚刚重新试了一下 应该是因为uintptr 是4bytes,但在C中 double是8 bytes,把float64 拆成两个 uint32传过去,可以成功得到正确的值,感谢各位帮忙,我有点搞乌龙了,忘了确认bytes数。
#10
更多评论
小声提示一句, 对于异构的系统,如果不是webservice, 那么最好的方案是传输字符串, 这样对发送方和接收方都很友好. 随便你怎么marshal 和unmarshal
#1
**因为是第三方的dll 无法修改,考虑到後續跨平台需求,所以其实是用Python(64 bit)当clinet,golang(32 bit) 当server端來调用第三方dll(32 bit)作使用 有点麻烦~** :joy:
#2