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 | Дата: Пятница, 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
|
|
| |