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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...