BugDigger
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору По поводу знаменитой ошибки в С++ Builder Error "Property and method <MethodName> are not compatible" in Object Inspector https://quality.embarcadero.com/browse/RSP-29734 выложен неофициальный хотфикс от разработчика (Bruneau Babet) Cpp.Classic.Compiler.zip https://etsfftp01.embarcadero.com/?u=IQlG&p=5yjl&path=/Cpp.Classic.Compiler.zip I have uploaded a copy of the compilers to this link - Cpp.Classic.Compiler.zip. It fixed the testcase that I referred to above. If anyone wants to give it a try, please use these steps: 1. Back up your copy of bcc32.exe and comp32x.dll 1.° These files are usually located under C:\Program Files (x86)\Embarcadero\Studio\21.0\bin. 2. Replace them w/ the files from this link - Cpp.Classic.Compiler.zip. NOTE: If you created any event handler w/ the buggy compiler from R104, after you rebuild the component w/ the updated compiler, the IDE may show a different error that says that existing handler is incompatible. The error is like this: [] This is because the handler was created w/ incorrect RTTI generated by the buggy compiler, hence it probably had an incorrect signature. For example, the buggy compiler generated this handler for the TContextPopupEvent closure: void __fastcall Edit11ContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled); The MousePos parameter should have been a const-ref. ° One way to resolve this is to select the Yes button to remove the reference. This will unhook the handler from the designer but will not remove the handler. Then comment out the handler code and have the IDE/Designer regenerate it. ° The other way is to fix the hander signature manually by looking at the closure definition. If anyone gives these files a try, drop me a note here (or via email at 'bbabetATembarcaderoDOTcom') to let me know if it worked or not. Upd: ... components will have to be rebuilt w/ the updated compiler: using the existing binaries means you are using the same buggy RTTI that was generated by the buggy compiler. A variant of the problem was fixed in Update#1 (when using TMouseMoveEvent), but that change was insufficient, and it masked the real problem. I created a testcase w/ several hundred closures from our packages (a subset of them is shown in the steps above; in the in-house testcase I used closures from internal packages as well), and that gave us a better idea of the root problem. Yesterday I uploaded a temporary/unofficial compiler at this link - Cpp.Classic.Compiler.zip that I hope addresses the root problem. I would like to hear from anyone trying this upload so we may evaluate whether to hotfix or if more work is required. Так что для фикса проблемы им придется перекомпилировать все свои исходники, так что это выльется едва ли не в новый релиз ... Т.о. выложенный компилятор, к сожалению, не решает пока проблему, но надежда уже есть. | Всего записей: 179 | Зарегистр. 14-06-2007 | Отправлено: 06:43 15-09-2020 | Исправлено: BugDigger, 06:44 16-09-2020 |
|