php小编子墨将为您介绍如何使用windows.h将C语言代码转换为Golang。Windows.h是Windows操作系统的头文件,其中包含了许多用于系统编程的函数和数据类型。通过将C代码转换为Golang,我们可以在Golang环境中使用Windows API,实现更加高效和灵活的程序开发。本文将为您详细介绍转换步骤和注意事项,帮助您顺利完成C到Golang的转换,提升开发效率和代码质量。
我想将此代码转换为 c 语言,效果很好
#include <windows.h> 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) }
但是不起作用。 有什么建议吗?
谢谢
错误是不安全指针中的&运算符。 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的详细内容。更多信息请关注PHP中文网其他相关文章!