KnowledgeBase 00113: Use of Borland C

Background

Prior to QM release 3.2-2, the 32-bit Windows version of QM was built using the
Borland C++ Builder compiler. This compiler is no longer supported and the
run time library has not been updated to extend its internal daylight saving
time tables beyond their previous end point.

The effect of this problem only shows when using the SYSTEM(1035) function or
the EPOCH() function to get a UTC time value. The returned value is
offset from its correct value by one hour when daylight saving time is in
effect. Other use of time related functions is not affected.

The only solution to this problem was to move to use of the Microsoft C
compiler that is fully supported and continues to handle dates correctly. The
64-bit Windows version of QM was not affected as this was built using the
Microsoft compiler from its introduction.

From a user's viewpoint, the core QM executable is not affected by this change
except to fix the daylight saving time bug, however, there are possible
implications for developers who use Borland C to interface with QM because
Microsoft and Borland use different library formats that are incompatible. In
particular, Borland links DLLs using a function number corresponding to their
sequence in the source code whereas Microsoft locates a function by name in a
sorted list.

QMClient

The import library for the QMClilib.dll dynamic link library released in the
bin subdirectory of the QMSYS account was previously present in two forms.
The qmcllbms.lib library was for users of Microsoft C and the
qmcllbbl.lib library was for users of Borland C.

From release 3.2-2, the Microsoft import library is renamed qmclilib.lib
though a copy named qmcllbms.lib will continue to be present for at least a
year. The Borland import library, qmcllbbl.lib, will no longer be present in
the QM release package though the installer will not delete it.

Because the daylight saving time bug has the possibility of affecting user
written application code, it is strongly recommended that any developer
currently using Borland C should move to the Microsoft compiler. It is
recognised, however, that this may take some time. A version of QMClilib.dll
built with Borland C and an associated import library will continue to be
available on request.

QMExtCall

The QMExtCall.dll dynamic link library has the same issue. The import library
has been renamed qmextcall.lib but a copy will using the old name
qmextcallms.lib will continue to be released for at least a year. The Borland
C equivalent, qmextcallbl.lib, will no longer be included in the release
package.