Microsoft wisely updated
time_t and the
ATL CTime and
CTimeSpan to use an
int64 under the hood (from a
int32), this is good except when we have those data types in our interfaces, and now we have broken backwards compatibility.
time_t has a a define you can use force
time_t to stay a int32
_USE_32BIT_TIME_T. Unfortunately CTime/CTimeSpan do not respect this. One of our DCOM components packs arrays of objects into a stream. To make the game more fun one object element was a CTime and another was a variable length string. The fun began when another teams Delphi tool unpacked these streams and went off into the weeds because the packed objects were different lengths, thus the variable length string’s length was in a different place. Lots of fun debugging that one.
Anyway, the current solution was to change the object’s to use int32’s instead of CTime/CTimeSpan, and downcast the int64 result from .GetTime() and .GetTimeSpan() to a int32. Now our interface is restored. Ok so we are not future proof, and that app will start to behave fun some time in the future, but this just adds to the code paths that need retiring. Oh the joys of large old systems.