微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cgo DLL 在 windows 32 位平台上不起作用?

如何解决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 举报,一经查实,本站将立刻删除。