
php小编子墨将为您介绍如何使用windows.h将C语言代码转换为Golang。Windows.h是Windows操作系统的头文件,其中包含了许多用于系统编程的函数和数据类型。通过将C代码转换为Golang,我们可以在Golang环境中使用Windows API,实现更加高效和灵活的程序开发。本文将为您详细介绍转换步骤和注意事项,帮助您顺利完成C到Golang的转换,提升开发效率和代码质量。
问题内容
我想将此代码转换为 c 语言,效果很好
#includevoid 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)
}
但是不起作用。 有什么建议吗?
谢谢
本文档主要讲述的是JSON.NET 简单的使用;JSON.NET使用来将.NET中的对象转换为JSON字符串(序列化),或者将JSON字符串转换为.NET中已有类型的对象(反序列化?)。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
立即学习“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









