Go 调用dll中的函数,如何传递double 型的参数?

wn0112 · · 2937 次点击
我有一个调用C++编译的dll的界面库项目, 会接收dll函数传过来的各种类型的数据, 也要传各种值或指针进dll函数. 还有调用windows系统API也是涉及很多数据类型与go进行交互: [https://github.com/twgh/xcgui](https://github.com/twgh/xcgui) ----- 关于你的问题, 应该接收第二个返回值, 而不是第一个: ```go _, r2, _ := syscall.Syscall() ``` ----- 然后用下面的函数去转换r2: ```go //float32的没问题 func UintPtrToFloat32(ptr uintptr) float32 { u := uint32(ptr) return *(*float32)(unsafe.Pointer(&u)) } //float64的我没测试, 想来应该可以 func UintPtrToFloat64(ptr uintptr) float64 { u := uint64(ptr) return *(*float64)(unsafe.Pointer(&u)) } ```
#9
更多评论
double 不就是float64 吗
#1
go调用dll 方法 ``` var ( moddll = syscall.NewLazyDLL("test.dll") procDiv = moddll.NewProc("div") ) func main() { Div(1.33, 2.22) } func Div(a, b float64) float64 { r1, _, _ := syscall.Syscall(procDiv.Addr(), 2, uintptr(a), uintptr(b), 0) return float64(r1) } ```
#2