使用 windows.h 将 C 转换为 Golang

使用 windows.h 将 c 转换为 golang

php小编子墨将为您介绍如何使用windows.h将C语言代码转换为Golang。Windows.h是Windows操作系统的头文件,其中包含了许多用于系统编程的函数和数据类型。通过将C代码转换为Golang,我们可以在Golang环境中使用Windows API,实现更加高效和灵活的程序开发。本文将为您详细介绍转换步骤和注意事项,帮助您顺利完成C到Golang的转换,提升开发效率和代码质量。

问题内容

我想将此代码转换为 c 语言,效果很好

#include void main() {    double* mdl_g;    void* dll = loadlibrary("./test_win64.dll");    mdl_g     = ((double*)getprocaddress(dll, "g"));    printf("g = %.2f",*mdl_g);}

登录后复制

到 go 语言。我刚刚尝试了这个技巧,但不起作用:

func main() {    dll, _ := syscall.LoadDLL("./test_win64.dll")    mdl_G, _ := syscall.GetProcAddress(dll.Handle, "G")    real_G := (*float64)(unsafe.Pointer(&mdl_G))    log.Print(*real_G)}

登录后复制

但是不起作用。有什么建议吗?

谢谢

立即学习“go语言免费学习笔记(深入)”;

解决方法

错误是不安全指针中的&运算符。getprocaddress 方法已经返回一个 uintptr。

func main() {    dll, _ := syscall.LoadDLL("./test_win64.dll")    mdl_G, _ := syscall.GetProcAddress(dll.Handle, "G")    real_G := (*float64)(unsafe.Pointer(mdl_G)) // this conversion is safe.    log.Print(*real_G)}

登录后复制

go vet 将报告可能的功能滥用。但是,这是正确的: allow conversion of uintptr to unsafe.pointer when it point to non-go内存#58625

以上就是使用 windows.h 将 C 转换为 Golang的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2484922.html

(0)
上一篇 2025年3月4日 21:39:48
下一篇 2025年2月23日 10:18:54

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论