在什么情況下 Go 會在調(diào)用dll時出現(xiàn)“信號在 cgo 執(zhí)行期間到達”之類的恐慌?要調(diào)用的代碼是 - 基于zsyscall_windows.goin srcof go 分布中的樣本:var ( // entry names found using dumpbin /exports dllSweph = syscall.NewLazyDLL("swedll32.dll") _swe_jdut1_to_utc = dllSweph.NewProc("_swe_jdut1_to_utc@36") _swe_julday = dllSweph.NewProc("_swe_julday@24"))func swe_julday(year, month, day int32, hour float64, gregflag int32) float64 { r, _, errn := syscall.Syscall6( _swe_julday.Addr(), 5, uintptr(year), uintptr(month), uintptr(day), uintptr(hour), uintptr(gregflag), 0) if r == 0 { if errn != 0 { panic(error(errn)) } } return float64(r)}func swe_jdut1_to_utc(tjd_ut float64, gregflag int32, iyear, imonth, iday, ihour, imin *int32, dsec *float64) { defer func() { if e := recover(); e != nil { } }() syscall.Syscall9( _swe_jdut1_to_utc.Addr(), 8, uintptr(tjd_ut), uintptr(gregflag), uintptr(unsafe.Pointer(iyear)), uintptr(unsafe.Pointer(imonth)), uintptr(unsafe.Pointer(iday)), uintptr(unsafe.Pointer(ihour)), uintptr(unsafe.Pointer(imin)), uintptr(unsafe.Pointer(dsec)), 0)}現(xiàn)在當我打電話時swe_julday一切似乎都很好;雖然它不是,它給出了錯誤的答案。當swe_jdut1_to_utc被調(diào)用時,我得到:Exception 0xc0000005 0x1 0x42e5e5 0x3235ce40PC=0x3235ce40signal arrived during cgo execution.../sweph.swe_jdut1_to_utc(0x40000000, 0x4150b979, 0x1, 0x1207bf24, 0x1207bf28, 0x1207bf34, 0x1207bf30, 0x1207bf2c, 0x1207bf38)...(trace info)eax 0x0ebx 0x1207be94ecx 0x1207bf38edx 0x42e5e5edi 0xcfeacesi 0x0ebp 0xcfe5cesp 0xcfdd8eip 0x3235ce40eflags 0x10246cs 0x23fs 0x53gs 0x2bexit status 2exit status 1環(huán)境:Windows 8 x64go 1.4 x86gcc x86而且我不知道是否gcc真的需要只調(diào)用一個 dll,但我已經(jīng)以任何方式安裝了它,因為錯誤是關于cgo. 所有命令都在路徑中。使用管理權限編譯時出現(xiàn)同樣的錯誤。
1 回答

拉風的咖菲貓
TA貢獻1995條經(jīng)驗 獲得超2個贊
我設法構建了使用 swe_julday 函數(shù)的 delphi 應用程序。不幸的是,我可以看到它使用 fstp asm 指令來檢索 swe_julday 返回的結果。Go 的 syscall.Syscall 不支持此功能。你是我們的幸運兒。如果可以使用 mingw 編譯器構建您的庫,我認為您最好的選擇是使用 CGO。對不起
- 1 回答
- 0 關注
- 465 瀏覽
添加回答
舉報
0/150
提交
取消