Go 언어에서 DLL 함수 호출(시스템 호출)
mksyscall_windows.go
의 도구인데 잘 몰라요.(지금도 잘 이해가 안 돼) 이 도구 자체의 이름으로 볼 때 윈도우를 만드는 시스템 호출물이다.
제목이 변경되었습니다. DLL 함수를 호출하는 방법으로는 적합하지 않기 때문입니다.
참고할 수 있도록 허락해 주십시오: Big Sky:golang에서 모델 DLL을 호출하는 방법
―――――――――――
우선, 나는
syscall_windows.go
라는 파일을 만들어서 다음과 같은 내용을 정의했다.go generate
에 사용되는 도구mksyscall_windows.go
중간 코드 생성zsyscall_windows.go
에 대한 정의mksyscall_windows.go
DLL 함수를 포함하는 Go 언어 함수syscall_windows.go
package main
//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall_windows.go
//sys messageBox(hWnd syscall.Handle, lpText string, lpCaption string, uType uint32) (dwRet uint32, err error) = User32.MessageBoxW
go generate
는 다음 코드를 생성합니다.zsyscall_windows.go(발췌)
func messageBox(hWnd syscall.Handle, lpText string, lpCaption string, uType uint32) (dwRet uint32, err error) {
var _p0 *uint16
_p0, err = syscall.UTF16PtrFromString(lpText)
if err != nil {
return
}
var _p1 *uint16
_p1, err = syscall.UTF16PtrFromString(lpCaption)
if err != nil {
return
}
return _messageBox(hWnd, _p0, _p1, uType)
}
func _messageBox(hWnd syscall.Handle, lpText *uint16, lpCaption *uint16, uType uint32) (dwRet uint32, err error) {
r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hWnd), uintptr(unsafe.Pointer(lpText)), uintptr(unsafe.Pointer(lpCaption)), uintptr(uType), 0, 0)
dwRet = uint32(r0)
if dwRet == 0 {
if e1 != 0 {
err = errnoErr(e1)
} else {
err = syscall.EINVAL
}
}
return
}
★의문★----dwRet
(이상 시 0
) 오류 처리가 잘 된 것 같습니다.정상시
0
의 함수는 어떻게 합니까?★★★★ 2021/11/23 추기 ★★★★
Windows 시스템 호출을 처리하는 함수이기 때문에 DWROD가 반환될 때 예외일 경우 0이 될 수 있습니다.
―――――――――――
그리고 생성된
messageBox()
을 호출하면 됩니다.main.go
package main
func main() {
messageBox(0, "message", "title", 0)
}
실행할 때 메시지 상자를 표시합니다.Reference
이 문제에 관하여(Go 언어에서 DLL 함수 호출(시스템 호출)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ymdymd/items/291e9f6bc3999de7489a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)