go调用 windows api 分为两种方式,一种是懒加载(第一次调用函数时才加载 dll),一种是立即加载。
需要注意的是,windows api 里面有很多常量和结构体需要自己转化成go的才可以用(文档中有对应的说明),如下获取系统进程列表时需要用到的部分其实都是根据官方文档转化而来。windows api 链接地址
需要特别注意的是,API 函数的参数都是 uintptr 类型,对指针类型需要通过 unsafe.Pointer 函数来转换,如果是 false 和 null 就用 0 代替
不再需要使用 DLL 里的函数之后可以卸载 DLL,可使用 syscall.FreeLibrary 来卸载。
1、懒加载:kernel32 =syscall.NewLazyDLL(“kernel32.dll”)
package main
import (
"fmt"
"syscall"
"unsafe"
)
//todo windows api 相关
type (
BOOL uint32
BOOLEAN byte
BYTE byte
DWORD uint32
DWORD64 uint64
HANDLE uintptr
HLOCAL uintptr
LARGE_INTEGER int64
LONG int32
LPVOID uintptr
SIZE_T uintptr
UINT uint32
ULONG_PTR uintptr
ULONGLONG uint64