Go DLL创建和使用详解

831 阅读2分钟

首先需要知道什么是DLL?

.dll 动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的,简单理解就是将一个函数或者模块存放在外部文件,所有语言可调用的程序。



创建DLL

我们先从生成DLL开始,以下是一个简单的例子,Sum函数接收ab变量返回变量之和。

package main

//生成头文件所需,可以试试去掉是什么效果
import "C"

//export Sum
func Sum(a, b int) int {
	return a + b
}

func main() {
  //可以为空但不能没有main函数
}

需要注意export关键字用来声明该函数的可导出性。

接下来开始编译DLL程序,命令如下

go build -ldflags "-s -w" -buildmode=c-shared -o Dll名称.dll 包名.go

此处需要开启cgo不过你都开始研究这个了我就不教这个了。



调用DLL

Go语言调用dll非常简单,仅需几行代码。 我们使用syscall包中的NewlazyDLL方法来导入DLL程序,因为这是最简单方便的方法。

首先导入DLL程序

dll := syscall.NewLazyDLL("目录")

导入完毕后使用DLL中的方法也就是函数,我们这里使用刚刚的SUM方法,这里可以理解查找函数。

proc := l.NewProc("Sum")

接下来开始传参并调用函数

r1, r2, msg := proc.Call(9, 7)
fmt.Println(r1, r2, msg)

调用结果

16 17018880 The operation completed successfully.


其他说明

本文使用了最简单的方式来演示创建DLL和使用DLL的方式,需要注意的是

  • 创建时DLL是需要注意GO语言的数据类型不能直接使用。
  • export导出关键字必须使用
  • main入口函数必须要有
  • cgo需要打开
  • Call传参时参数是uintptr类型