Есть несколько способов сделать это.
Способ cgo позволяет вам вызывать функцию следующим образом:
import ("C")
...
C.SomeDllFunc(...)
Он будет вызывать библиотеки в основном путем "связывания" с библиотекой.Вы можете поместить код C в Go и импортировать обычным способом C.
Есть и другие методы, такие как syscall
import (
"fmt"
"syscall"
"unsafe"
)
// ..
kernel32, _ = syscall.LoadLibrary("kernel32.dll")
getModuleHandle, _ = syscall.GetProcAddress(kernel32, "GetModuleHandleW")
...
func GetModuleHandle() (handle uintptr) {
var nargs uintptr = 0
if ret, _, callErr := syscall.Syscall(uintptr(getModuleHandle), nargs, 0, 0, 0); callErr != 0 {
abort("Call GetModuleHandle", callErr)
} else {
handle = ret
}
return
}
Естьэта полезная страница github, которая описывает процесс использования DLL: https://github.com/golang/go/wiki/WindowsDLLs
Существует три основных способа сделать это.