假如dll里的函数是这样:
```c
double Add(int a, int b);
```
用go调用dll
```go
func main() {
// 使用NewLazyDLL加载DLL
dll := syscall.NewLazyDLL("example.dll")
// 获取DLL中的函数句柄
proc, err := dll.NewProc("Add")
if err != nil {
fmt.Println("Error getting procedure handle:", err)
return
}
var result, code uintptr
var err error
// 关键来了
// 如果dll是gcc(mingw)编译的,result是函数返回结果,code是个大整数,不知道是啥
// 如果dll是msvc编译的,result是0,code才是函数返回结果
// 无论哪个编译的, err 永远不为nil, 是字符 The operation successfuly,大概是这个
result, code, err = proc.Call(uintptr(3), uintptr(4))
if err != nil {
fmt.Println("Error calling procedure:", err)
return
}
}
```
程序和dll是64位的
有疑问加站长微信联系(非本文作者)