一、编写动态库程序
让动态库输出一个Hello World
编写动态库程序lib.go
package main
import "C"
//export HelloWorld
func HelloWorld() {
println("Hello, World!")
}
func main() {}
必须以注释的方式声明要导出的方法:export HelloWorld
动态库中必须要有一个main函数
执行编译动态库命令: windows是dll,Linux是so命令一样,改后缀就行了
go build -buildmode=c-shared -o lib.dll lib.go
该命令会在目录下生成一个lib.dll和lib.h文件
如图:
二、编写调用动态库程序
package main
import (
"fmt"
"syscall"
)
func main() {
mylib, err := syscall.LoadLibrary("dll/lib/lib.dll")
if err != nil {
fmt.Println("LoadLibrary error:", err)
return
}
defer syscall.FreeLibrary(mylib)
helloWorld, err := syscall.GetProcAddress(mylib, "HelloWorld")
if err != nil {
fmt.Println("GetProcAddress error:", err)
return
}
// 将 helloWorld 转换成一个函数类型
var hello func()
hello = func() {
syscall.SyscallN(helloWorld, 0, 0, 0, 0)
}
// 调用 hello 函数
hello()
}
程序输出:
Hello, World!