关于syscall调用[]byte的问题 - 求教解答

wgq91here · · 3678 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

这里是我编写的函数,当然其他调用函数我也写了。只要是单独uint8\uint16\uint32,包括string类型的引用,基本都没有问题。但现在遇到[]byte,一直报错: func M_TermRecord(control string) ( pData [1000]byte, noUpLoadNum int16, recordBaseOver byte, cardMapOver byte, err error) { var ( nargs uintptr = 5 ) //pData, _ = syscall.ByteSliceFromString("pData") bControl, _ := syscall.BytePtrFromString(control) ret, _, callErr := syscall.Syscall6(uintptr(termRecord), nargs, uintptr(unsafe.Pointer(bControl)), uintptr(unsafe.Pointer(&pData[0])), uintptr(unsafe.Pointer(&noUpLoadNum)), uintptr(unsafe.Pointer(&recordBaseOver)), uintptr(unsafe.Pointer(&cardMapOver)), 0) if callErr != 0 && callErr != syscall.ERROR_IO_PENDING { abort("Failed in func M_TermRecord.", callErr) } if ret == 0 { return pData, noUpLoadNum, recordBaseOver, cardMapOver, errors.New("M_TermRecord: Failed!") } return } 下面是dll函数说明 function TermRecord(Control:Byte;pData: pbyte;var NoUpLoadNum:Word; var RecordBaseOver,CardMapOver:Boolean): integer;stdcall;external 'DllTermCommPrj.dll'; 错误如下: panic: invalid memory address or nil pointer dereference fatal error: panic during malloc [signal 0xc0000005 code=0x0 addr=0x20 pc=0x41d1fa] runtime stack: runtime.panic(0x4b3c80, 0x5b00d8) C:/Users/ADMINI~1/AppData/Local/Temp/2/makerelease529514319/go/src/pkg/runtime/panic.c:233 +0x2b runtime: unexpected return pc for runtime.asmstdcall called from 0x123d09d0 goroutine 1 [syscall]: runtime.cgocall(0x422020, 0x202618) C:/Users/ADMINI~1/AppData/Local/Temp/2/makerelease529514319/go/src/pkg/runtime/cgocall.c:149 +0x1

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3678 次点击  
加入收藏 微博
1 回复  |  直到 2014-03-30 14:08:15
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传