go调用不同编译器编译的DLL返回值不同的问题

wn0112 · 2024-03-01 17:25:02 · 1046 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2024-03-01 17:25:02 的主题,其中的信息可能已经有所发展或是发生改变。

假如dll里的函数是这样:

    double Add(int a, int b);

用go调用dll

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位的


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1046 次点击  
加入收藏 微博
2 回复  |  直到 2024-03-13 17:04:50
jiftle
jiftle · #1 · 大约1年之前

结论是什么? vc编译的动态库能用?mingw编译的不能用吗

wn0112
wn0112 · #2 · 大约1年之前

只是想确定一下,我的发现对不对。为什么会这样。还有err 永远不会为nil的,为什么网上教程都用err为nil判断是否有错误。我用的是 go1.12 x64

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传