**前面有搜寻过这篇文章[超级链接]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:
我这里测试了,按你的写法没有问题.
```cpp
int hello(double a) {
return int(a * 1000);
}
```
```go
dll := syscall.MustLoadDLL("C:\\Users\\ADMIN\\CLionProjects\\make_dll\\cmake-build-release-cygwin\\cygmake_dll.dll")
var a = 1.111
var tempDouble = math.Float64bits(a)
call, u, err := dll.MustFindProc("hello").Call(uintptr(tempDouble))
fmt.Println(call, u, err)
```
```
1111 4652601045120188416 The operation completed successfully.
```
#11
更多评论
小声提示一句, 对于异构的系统,如果不是webservice, 那么最好的方案是传输字符串, 这样对发送方和接收方都很友好. 随便你怎么marshal 和unmarshal
#1
**因为是第三方的dll 无法修改,考虑到後續跨平台需求,所以其实是用Python(64 bit)当clinet,golang(32 bit) 当server端來调用第三方dll(32 bit)作使用 有点麻烦~** :joy:
#2