Бронирование турбазы доступно на сайте http://mirturbaz.ru [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: WildMan  
Практика. Второй курс. Бригада № 2.
IGGGORRREKKKДата: Понедельник, 13.07.2009, 19:31 | Сообщение # 1
Дилетант
Группа: Деловоды
Сообщений: 38
Репутация: 10
Статус: Offline
Участники второй бригады! И все интересующиеся! Здесь обсуждаем наше задание, делимся мнениями как его выполнять, меняемся файлом и вообще пытаемся сделать его.


http://lepeshkin.wordpress.com
http://twitter.com/ilepeshkin
 
COBAДата: Среда, 15.07.2009, 21:53 | Сообщение # 2
Великий админ
Группа: Суровые Одмины
Сообщений: 108
Репутация: 12
Статус: Offline
У меня ничерта так ничего и не получилось.. просто ***!! Полторы неедли прошло - результата ноль.. что за бредятина?!?!

Вот фрагменты из моего дневника:

Quote
14.07.09
Преподаватель посоветовал добиться одинакового функционирования транслятора в исполняемый быстро код и программы Calc программного комплекса OpenOffice.org путём открытия проекта в VS2003, что обеспечивалось бы успешной компиляцией в оной.

Установил VisualStudio 2003. Открыл файл проекта из папки \PRACT09\INTERPRET\Build165_2604 в блоктноте:

Code
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ScInter", "ScInter\ScInter.vcproj", "{4F667965-218D-4246-AFE8-BD41FCD4255A}"
EndProject
Global
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
   Debug|Win32 = Debug|Win32
   Release|Win32 = Release|Win32
  EndGlobalSection
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
   {4F667965-218D-4246-AFE8-BD41FCD4255A}.Debug|Win32.ActiveCfg = Debug|Win32
   {4F667965-218D-4246-AFE8-BD41FCD4255A}.Debug|Win32.Build.0 = Debug|Win32
   {4F667965-218D-4246-AFE8-BD41FCD4255A}.Release|Win32.ActiveCfg = Release|Win32
   {4F667965-218D-4246-AFE8-BD41FCD4255A}.Release|Win32.Build.0 = Release|Win32
  EndGlobalSection
  GlobalSection(SolutionProperties) = preSolution
   HideSolutionNode = FALSE
  EndGlobalSection
EndGlobal

Исправил в строке «Microsoft Visual Studio Solution File, Format Version 9.00» 9.00 на 7.00 и сохранил изменения. Запустил проект через VS2003. Запуск не завершился успехом. Среда высветила ошибку «Поддерживаются проекты только версии 7.0 и 7.1. Данный проект версии 8.0» (Хотя на самом деле 9.0). Затем студия предлагает конвертировать проект в версию 7.1. После чего высвечивается ошибка, что данная операция не удалась. Изменённая строка Microsoft Visual Studio Solution File, Format Version 7.00 автоматически изменяется на Microsoft Visual Studio Solution File, Format Version 8.00.
Попытался изменить так же в строке «# Visual Studio 2005» 2005 на 2003 – не помогло.
Т.к. не могу осуществить компиляцию через visualStudio 2003 буду выполнять своё задание «Добиться одинаковой работы транслятора в исполняемый быстро код и программы Calc программного комплекса OpenOffice.org» через VS2005, устраняя тип float из кода во всех возможных местах (на double).

15.07.2009
Начал пытаться найти места вызова переменных типа float и функций использующих данный тип.
Долго искал, вводя в поиске «float» но таких (объявления переменных или вызова функций) не оказалось. Нашёл лишь несколько объявлений функций, но не нашёл ни одного места их вызова.
Вот все значимые из них:

Code
ByteString ByteString::CreateFromFloat( float f )
{
  sal_Char aBuf[RTL_STR_MAX_VALUEOFFLOAT];
     BOOST_STATIC_ASSERT(RTL_STR_MAX_VALUEOFFLOAT <= STRING_MAXLEN);
  return ByteString(
         aBuf, static_cast< xub_StrLen >(rtl_str_valueOfFloat( aBuf, f )) );
}

float ByteString::ToFloat() const
{
  DBG_CHKTHIS( ByteString, DbgCheckByteString );

     OSL_ENSURE(false, "ByteString::ToFloat unusable");
  return 0;
}

float SAL_CALL rtl_ustr_toFloat(sal_Unicode const * pStr)
{
     return (float) rtl_math_uStringToDouble(pStr,
                    pStr + rtl_ustr_getLength(pStr),
                    '.', 0, 0, 0);
}

sal_Int32 SAL_CALL rtl_ustr_valueOfFloat(sal_Unicode * pStr, float f)
{
     rtl_uString * pResult = NULL;
     sal_Int32 nLen;
     rtl_math_doubleToUString(
         &pResult, 0, 0, f, rtl_math_StringFormat_G,
         RTL_USTR_MAX_VALUEOFFLOAT - RTL_CONSTASCII_LENGTH("-x.E-xxx"), '.', 0,
         0, sal_True);
     nLen = pResult->length;
     OSL_ASSERT(nLen < RTL_USTR_MAX_VALUEOFFLOAT);
     rtl_copyMemory(pStr, pResult->buffer, (nLen + 1) * sizeof(sal_Unicode));
     rtl_uString_release(pResult);
     return nLen;
}

static inline bool icopyConstructFromElements(
  uno_Sequence ** ppSeq, void * pSourceElements,
  typelib_TypeDescriptionReference * pElementType,
  sal_Int32 nStartIndex, sal_Int32 nStopIndex,
  uno_AcquireFunc acquire,
  sal_Int32 nAlloc = -1 ) // >= 0 means (re)alloc memory for nAlloc elements
{
     uno_Sequence * pSeq = *ppSeq;
  switch (pElementType->eTypeClass)
  {
             ………………………………………….
……………………………………………
case typelib_TypeClass_FLOAT:
    if (nAlloc >= 0)
              pSeq = reallocSeq( pSeq, sizeof(float), nAlloc );
          if (pSeq != 0)
          {   
              ::rtl_copyMemory(
                 pSeq->elements + (sizeof(float) * nStartIndex),
                 (char *)pSourceElements + (sizeof(float) * nStartIndex),
                 sizeof(float) * (nStopIndex - nStartIndex) );
          }
   break;

…………………………………………………….
…………………………………………………….
default:
   OSL_ENSURE( 0, "### unexpected element type!" );
         pSeq = 0;
   break;
  }
      
     if (pSeq == 0)
     {
         OSL_ASSERT( nAlloc >= 0 ); // must have been an allocation failure
         return false;
     }
     else
     {
         *ppSeq = pSeq;
         return true;
     }
}

Затем нашёл функцию с комментариями, где ещё до меня авторами видимо уже была сделана попытка устранить данную проблему.

Code
void CalcAOle::putValueToCell(int col, int row, double value)
{
IDispatch* pdispCurrentCell;
     getCellByPosition(col, row);
     pdispCurrentCell = Cell.pdispVal;
     VARIANT sStr;
     VariantInit(&sStr);
     /*sStr.vt = VT_R4;
     sStr.fltVal = value;*///float
     sStr.vt = VT_R8;
     sStr.dblVal = value;//double
     AutoWrap(DISPATCH_METHOD, NULL, pdispCurrentCell, L"setValue", 1, sStr);
     VariantClear(&sStr);
}

Зацепился за «VT_R4», и начал поиск подобных переменных в проекте. Оказалось ошибся. Подобных использований не нашёл. Везде если и используются, то на подобе ”RT_R8”, “dblVal” и т.п.

Обсмотрел все файлы группы interprX.cxx (X=1,2,3,4,5,6) в папке ../scinter/main/inter/, отвечающих за непосредственное вычисление. Убедился, что все переменные с плавающей точкой, используемые там являются не меньшими типа double.

Думаю, что Костерину сказали, что несовпадение значений в компиляторе и в опен офисе из-за типа float в промежуточных значениях, что бы мозги ему запудрить!!
Вообще я думаю в этом плане там всё ок кажется...



Без риска победив, без славы торжествуешь...
 
IGGGORRREKKKДата: Четверг, 16.07.2009, 18:29 | Сообщение # 3
Дилетант
Группа: Деловоды
Сообщений: 38
Репутация: 10
Статус: Offline
ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful ireful
Вот все, что я чувствую, когда Костерин начинает говорить по заданию. Он вообще проверял, что ему говорили или на слово верил? А то често говоря, такое чувство, что предыдущие ОООборцы занимались только выдергиванием интепретатора и пошаговым выполнением.



http://lepeshkin.wordpress.com
http://twitter.com/ilepeshkin
 
IGGGORRREKKKДата: Пятница, 17.07.2009, 15:03 | Сообщение # 4
Дилетант
Группа: Деловоды
Сообщений: 38
Репутация: 10
Статус: Offline
Вопрос:В каких файлах прописывать функцию, которую я реализовал?
Ответ:
CodeToString.h
Compiler.hpp
Token.cxx
interpr4.cxx
interpr5.cxx
interpre.hxx
opcode.hxx
parclass.cxx

В этих файлах на примере уже реализованных функций вы сможете интегрировать свою написанную функцию



http://lepeshkin.wordpress.com
http://twitter.com/ilepeshkin
 
  • Страница 1 из 1
  • 1
Поиск: