首页 > Go学习 > go编译dll文件并调用
2021
12-06

go编译dll文件并调用

首先,go编译dll的过程需要用到gcc,所以要先安装gcc

现在我们开始编写要编译成dll的go程序

package main
# 包名必须为main

import "C"
# 必须引入C(大写)包,C是虚拟包,可以调用C语言函数

//export MyFunc
func MyFunc(a int , b int) int{
    return a+b
}
# 需要导出来的函数上面必须要写//export [函数名]格式的注释且与函数主体之间不能有其他语句
# 编写要导出函数的逻辑
# 函数名并不一定首字母大写,但是习惯上首字母会大写

func main(){}
# 必须要有一个main函数,可以为空但必须要有

以上内容为一个最为简单的示例,下面我们使用go build命令编译成dll

go build -ldflags "-s -w" -buildmode=c-shared -o dll_filename go_filename

-ldflags选项非必须,但是加上会使编译成的dll体积减小,所以一般会使用该选项

以上命令会生成一个dll文件和同名的.h头文件,该头文件不用管,可以删除

调用dll文件

Go语言

import (
    "syscall"
    "fmt"
)
# 引入syscall包来调用dll文件

func main(){
    dll := syscall.NewLazyDLL("test.dll")
    jiafa := dll.NewProc("Add")
    demo,err,msg := jiafa.Call(3,5)
    fmt.Println(demo)
    fmt.Println(err)
    fmt.Println(msg)
}

NewLazyDLL()函数引入dll文件
NewProc()函数注册dll文件中的函数
Call()函数调用函数
Call()函数返回3个值,第一个为函数返回值,第二个为异常,第三个为运行函数的信息

Python语言

import ctypes
# 引入ctypes包来调用dll文件

dll = ctypes.CDLL(r"E:/code/golang/ku/test.dll")
# 引入指定的dll文件

demo = dll.chu(66, 33)
# 运行dll文件中的函数

print(demo)

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。