[golang/govcl/坑] govcl 中尽量不要使用闭包函数
clq
浏览(375) -
2024-01-14 16:46:04 发表
编辑
关键字:
[golang/govcl/坑] govcl 中尽量不要使用闭包函数
至少不要在闭包函数间传递 govcl 的控件指针。
govcl 的作者其实已经说过了,不过感觉作者对 golang 的指针理解不深(不过 golang 已经对一些指针特别是 cgo 和 unsafe 下的一些东西确实没有明确说法,只有些习惯用法)。
可能他也没有太多时间去测试各种情况,只是他发现了这种现象,所以做了备注而没有去处理。它还在 govcl 的各个控件指针声明中说明了 golang 的 gc 对指针要特殊处理。只不过他还没来得及全部处理清楚。
//--------------------------------------------------------
func SetIconOnRClick(rootview * vcl.TPanel, view * vcl.TPanel, info * TGovcl_ControlInfo_Item) {
info.ExFileType = "config_file"; //表示文件内容是配置信息,下载得到后还要二次处理
//var view2 = view;
//view2.Hide(); //test 奇怪,有些就是不行 //这里还是可以的,可能是 go 的 gc 与 govcl 的冲突了
view.SetOnContextPopup(func(sender vcl.IObject, mousePos types.TPoint, handled *bool) {
var x = mousePos.X;
var y = mousePos.Y;
var view3 = vcl.AsPanel(sender);
//ShowIconMenu((*vcl.TPanel)(view.Parent().Parent()), view);
//ShowIconMenu(rootview, view, x, y);
ShowIconMenu(rootview, view3, x, y); //用 view 有时候是错误的,而用事件中强制转换过来的 view3 则都是正确的。所以说明 govcl 中的说明是正确的
//即闭包函数中传递 govcl 的指针时有可能会出错
//view.Hide(); //test 奇怪,有些就是不行
//view2.Hide(); //test 奇怪,有些就是不行
*handled = true; //意思是不要弹出默认菜单
});
}//
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.