vczh-libraries / GacUI

GPU Accelerated C++ User Interface, with WYSIWYG developing tools, XML supports, built-in data binding and MVVM features.
Other
2.35k stars 297 forks source link

带有ev.ItemLeftButtonDoubleClick-eval的BindableList编译报错 #56

Closed roodkcab closed 3 years ago

roodkcab commented 4 years ago

Instance_CompileEventHandlers的DELETE_ASSEMBLY过程中释放了保存在GlobalStringKey中的自定义Iterface导致空指针

vczh commented 4 years ago

你有没有一个简单的可以repro的xml?贴一个便于debug

roodkcab commented 4 years ago

https://github.com/roodkcab/gacglobalstringdemo 用这个试一试?

roodkcab commented 4 years ago

image image 不是必现的,要多试几次

roodkcab commented 4 years ago

image 这个是在globalstring查找不到字符串时打印的出来的结果,有一个乱码

vczh commented 3 years ago

https://github.com/vczh-libraries/Workflow/commit/c145799f010c66ba786442e0ce616724e406cbea

vczh commented 3 years ago

这个字符串就是gacpass::ICode,很奇怪为什么一样是自定义类型,我就从来没遇到过这样的bug。

不过最后还是找到了,原因如上。Workflow的类型会被加载和删除好几次。vl::reflection::description::TypeInfoContent里面的const wchar_t* typeName本来都是字符串常量永远会存在,所以返回字符串就可以告诉WString说不需要使用引用计数。但是Workflow为了实现他只好弄了一个动态分配的,于是就凉了。因此覆盖一下这个函数,这个bug就修好了。