- The _Intf still use the “old” macros to get the PTypeInfo, which as far as I can see
won’t work correctly for most of the native (Delphi) types.
Right now, in the _Intf file generated, you are using some macros to get the PTypeInfo in the serialization of the structures (for instance, in ReadComplex, or the functions that write the parameters on the __Message and later read them.
These macros don’t work for several of the Delphi types, as they are executed by the C++ runtime (or so I guess) and then the PType returned is different from the one expected in the Delphi RO-SDK code. IIRC this was the case for instance for strings. This makes the serialization of the parameters and the results incorrect, maybe even make it crash at some point.
To fix this I created a simple PAS unit and included it in some of the RO packages that replaces the macros (for instance, __GetboolInfo or __GetWideStringInfo) with functions that are Delphi code and thus return the correctly PTypeInfo. IIRC I explained all this in some of the emails I sent to support a while back. The unit name was uROTypeInfoHelpers and it creates a HPP with the functions and the #defines needed to replace the old macros. I’m attaching the unit here, in case it got lost somewhere.
uROTypeInfoHelpers.pas (2.8 KB)
I added this unit to the RemObjects_Core package. It should be usable in any modern version, I believe, but I haven’t tried in anything but XE5.
Regarding number 6, I don’t remember exactly what is the problem there. I’m not using DA right now, just RO-SDK, so I haven’t had a chance to see if the headers are still being included incorrectly. I think the problem was that if you included DataAbstract4 in a RODL, then when generating the CPP code the DataAbstract4 header was not included and it made it impossible to compile the generated code. And as these units are regenerated with each build fixing them by hand was not possible. I would have to check directly what was the issue, but something along these lines IIRC.
I believe there are some other issues I have found with some other headers, which are fixed more or less easily, but if it was possible to have them working from the beginning it would certainly make things much more easy.
On a side not, also, recompiling the packages to enable C++ is somewhat awful, specially as you have to setup the header output location and so on. And this for each platform. I recommend that you change the fixed locations in each platform to use the $(Platform) macro and move the locations to the base project.
Thanks!