• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    golang syscall 三种加载DLL方式小结

    发布者: 姬7089 | 发布时间: 2025-8-14 06:58| 查看数: 90| 评论数: 0|帖子模式

    1. syscall.MustLoadDLL()

    MustLoadDLL 是一种加载 DLL 的函数,它会在加载 DLL 时,如果发生错误,直接 panic。
    错误处理:如果 DLL 加载失败,它会调用 panic,导致程序崩溃。
    1. dll := syscall.MustLoadDLL("kernel32.dll")  // 如果加载失败,将 panic
    复制代码
    MustLoadDLL 会尝试加载指定的 DLL,如果 DLL 加载失败(例如,DLL 文件不存在或路径错误),它会直接导致程序崩溃。因此,这个函数通常用于加载必须存在的 DLL 文件,程序无法容忍 DLL 加载失败。

    2. syscall.NewLazyDLL()

    NewLazyDLL 用于创建一个“懒加载”DLL 对象。这意味着,DLL 会被加载,但是只有在你调用其内的函数时才会真正发生加载操作。
    懒加载:当你调用 NewLazyDLL 创建一个 DLL 对象时,它并不会立即加载 DLL,而是延迟到你实际调用该 DLL 内部的某个函数时才加载 DLL。
    错误处理:如果在调用某个 DLL 函数时遇到问题,才会返回错误(而不是在 DLL 加载时出错)。
    1. dll := syscall.NewLazyDLL("kernel32.dll")
    2. func := dll.NewProc("GetLastError")
    3. // 只有调用 func 时,DLL 会被加载
    4. ret, _, _ := func.Call()
    复制代码
    NewLazyDLL 会延迟加载 DLL,直到你调用 DLL 中的某个函数时才会实际执行加载操作。这对某些场景(如动态判断是否需要加载某个 DLL)比较有用。

    3. syscall.LoadDLL()

    LoadDLL 是一个通用的函数,用于加载指定的 DLL 文件。它不会在失败时 panic,而是返回错误。
    错误处理:如果 DLL 加载失败,它会返回一个 error,而不会导致程序崩溃。你需要自己处理错误。
    1. dll, err := syscall.LoadDLL("kernel32.dll")
    2. if err != nil {
    3.     fmt.Println("Error loading DLL:", err)
    4.     return
    5. }
    复制代码
    LoadDLL 和 MustLoadDLL 的区别在于,前者返回 error,而后者会直接 panic。因此,LoadDLL 给你更多的控制权,可以让你根据需要处理 DLL 加载失败的情况。
    到此这篇关于golang syscall 三种加载DLL方式小结的文章就介绍到这了,更多相关golang syscall加载DLL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表