TIdUDPServer, TIdTelnet, and TIdIPMCastClient changes in XE3
In XE3, Embarcadero changed the signature of the
TIdUDPServer.OnUDPRead event in their bundled copy of Indy 10. This was
done in an attempt to address a slew of related QC bug reports (#88816,
#89298, #89662, #92067, #93672, #94969, #97943, #99863, #103088, #104825) caused by the Delphi compiler not generating RTTI that would allow
the IDE to produce an event handler that was compatible with both Delphi
and C++Builder without errors. Additional
RTL/compiler changes would have been required to solve the root cause
of the original errors, but Embarcadero was trying to avoid that in this release.
Specifically, Embarcadero changed the AData parameter of the
OnUDPRead event from a Dynamic Array to an Open Array. Consequently, the parameter signature of this event is now different (as an Open Array requires an extra parameter to carry the array's length. A Dynamic Array does not need such a parameter), which means
that pre-existing user code that uses this event in earlier IDE versions will no longer work correctly without being updated
This change was NOT approved by the Indy development
team, and Embarcadero did NOT apply their change to other areas of Indy
that are affected by the same issue, such as the TIdTelnet.OnDataAvailable and TIdIPMCastClient.OnIPMCastRead events.
a single codebase, Embarcadero's changes have now been merged into subsequent SVN
releases of Indy 10.
Update, Oct 23 2012: changing the events to use an Open Array has caused new problems. So in a near-future Indy release, the events will go back to using a Dynamic Array again. However, changing TIdBytes into a plain Dynamic Array on all compiler versions, not mapping to System.TBytes or System.TArray anymore (which was the root of the problems), breaks compatibility with the SysUtils.TEncoding class in Delphi/C++Builder 2009+, so we have some compatibility issues to resolve before the events can be fixed.