kaisawind's blog
  • 关于
  • 所有帖子

golang cgo pinner的使用 - Wed, Sep 6, 2023

golang cgo pinner的使用

go 1.21添加了Pinner用于控制cgo中go内存的同步

  • 注意: 只能用于控制go中的指针,不能控制c指针。pin时需要将c指针排除。
func (o *IEC61850) ControlCancelWithShortAddr(sAddr string, ptSelectValue *DataAttributeData, ptParam *ControlParameters) (err error) {
	var pin runtime.Pinner
	defer pin.Unpin()
	cptSelectValue, malloc := gocDataAttributeData(ptSelectValue)
	cptParam := gocControlParameters(ptParam)
	if cptSelectValue.pvData != nil && !malloc {
		pin.Pin(cptSelectValue.pvData)
	}
	if cptParam.operTm != nil {
		pin.Pin(cptParam.operTm)
	}
	pAddr := C.CString(sAddr)
	defer C.free(unsafe.Pointer(pAddr))
	code := C.IEC61850_ControlCancelWithShortAddr(o.iec61850, pAddr, cptSelectValue, cptParam)
	if ErrorCodes(code) != IEC61850_ERROR_NONE {
		err = ErrorCodes(code).Error()
		return
	}
	return
}


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub