If you have troubles with creation of WPS classes (with OpenWatcom compiler).
The problem may occur because of co-processor initialization. Use this code to get stable creation of WPS class.
Проблемы с созданием WPS классов с помощью Open Watcom
И, собственно, любыми другими средствами. Проблема в инициализации сопроцессора. Среды выполнения всех компиляторов инициализируют его при загрузке DLL и, как выяснилось, инициализируют по разному. Из-за этого начинают происходить разные странности, например, размер файлов в детальном виде папки начинает отображаться с точностью до нескольких знаков после запятой.
Так как повлиять на классы, написанные IBM с помощью IBM C/C++ уже никак нельзя, то, как представляется, единственный путь - это инициализировать сопроцессор в своем классе точно также, как и IBM. А потом уже у себя разгребаться с возможными проблемами. Код для Open Watcom, инициализирующий сопроцессор соответствующим образом после загрузки DLL:
Code: Select all
int __dll_initialize( void )
{
// We need to initialize FPU exactly in the way IBM C/C++, otherwise
// all WPS classes get some of the side effects related to rounding
// of floating point values.
_control87( EM_INVALID | EM_DENORMAL | EM_ZERODIVIDE | EM_OVERFLOW | EM_UNDERFLOW | EM_INEXACT | RC_DOWN | PC_64,
MCW_EM | MCW_IC | MCW_RC | MCW_PC );
return 1;
}