如何解决cgo DLL 在 windows 32 位平台上不起作用?
这是我的代码:
a_windows.go
// +build windows
package main
import "C"
import "fmt"
type MSIHANDLE uint32
//export impl
func impl(installHdl MSIHANDLE) uint32 {
fmt.Println("1")
return 0
}
func main() {
// Need a main function to make CGO compile package as C shared library
}
我在 32 位 Windows 上使用 386 golang 构建它:
go build -buildmode=c-shared -o a.dll a_windows.go
我在 32 位 Windows 上使用以下代码运行 dll:
package main
import (
"golang.org/x/sys/windows"
)
var (
modMsi = windows.NewLazyDLL("a.dll")
impl = modMsi.NewProc("impl")
)
func main() {
impl.Call(uintptr(0))
}
然而,它崩溃并显示以下消息,而且它进入 file_posix.go 很奇怪...... 这是这次崩溃的原因吗?以及任何可能的修复?
goroutine 1 [running,locked to thread]:
runtime.systemstack_switch()
C:/Program Files/Go/src/runtime/asm_386.s:352 fp=0x114adcfc sp=0x114adcf8 pc=0x793f7ab0
runtime.addOneOpenDeferFrame(0x11426000,0x0,0x114ade3c)
C:/Program Files/Go/src/runtime/panic.go:716 +0x62 fp=0x114add18 sp=0x114adcfc pc=0x793cf942
panic(0x79452dc0,0x79440288)
C:/Program Files/Go/src/runtime/panic.go:967 +0x3b0 fp=0x114add7c sp=0x114add18 pc=0x793d0620
runtime.panicmem(...)
C:/Program Files/Go/src/runtime/panic.go:212
runtime.sigpanic()
C:/Program Files/Go/src/runtime/signal_windows.go:239 +0x266 fp=0x114adda4 sp=0x114add7c pc=0x793e1856
os.(*File).write(...)
C:/Program Files/Go/src/os/file_posix.go:48
os.(*File).Write(0x0,0x41906000,0x2,0x8,0xf2263f,0x11426048)
C:/Program Files/Go/src/os/file.go:174 +0x31 fp=0x114adde0 sp=0x114adda4 pc=0x79427d91
fmt.Fprintln(0x79481d70,0x114ade30,0x1,0x45,0x1141f500)
C:/Program Files/Go/src/fmt/print.go:265 +0x6a fp=0x114ade10 sp=0x114adde0 pc=0x7942b0ba
fmt.Println(...)
C:/Program Files/Go/src/fmt/print.go:274
main.impl(...)
Z:/wright/dll/a_windows.go:12
_cgoexp_50a0105f5970_impl(0x4ffce0)
_cgo_gotypes.go:38 +0x6f fp=0x114ade3c sp=0x114ade10 pc=0x794302df
runtime.cgocallbackg1(0x79430270,0x4ffce0,0x0)
C:/Program Files/Go/src/runtime/cgocall.go:292 +0x146 fp=0x114ade88 sp=0x114ade3c pc=0x793a3f06
runtime.cgocallbackg(0x79430270,0x0)
C:/Program Files/Go/src/runtime/cgocall.go:228 +0xc5 fp=0x114adebc sp=0x114ade88 pc=0x793a3d35
runtime: unexpected return pc for runtime.cgocallback called from 0xf451a6
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。