Компиляция / Compilation of WPS classes + OpenWatcom

User avatar
Eugene Gorbunoff
Site Admin
Posts: 685
Joined: Sat Apr 09, 2005 11:18
Location: St.Petersburg, Russia

Компиляция / Compilation of WPS classes + OpenWatcom

Postby Eugene Gorbunoff » Sat Feb 09, 2013 22:48

From: Glassman:

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;
}

Return to “Developers / Разработчики”

Who is online

Users browsing this forum: No registered users and 4 guests

cron