Форум » [x]Harbour » Предложение... и ламерские вопросы » Ответить

Предложение... и ламерские вопросы

AndreyZh: Добрый день уважаемые специалисты! Попробовал перевести часть большого проекта на Clipper 5.01R+CTII под xHarbour в плане проверки "быстродействия" и поверхностного анализа проблем совместимости. СПАСИБО Верченко Андрею за его инструкцию!!! Некоторый предварительные (для меня) результаты: 1. Оконная система CT поддерживается в xHarbour; 2. Быстродействие xHarbour в математике в 8 раз быстрее (наверное использование RAM), а на базах примерно на 30% быстрее, что очень заманчиво. Т.е. есть резон пытаться перевести часть "некритичных" приложений на [x]Harbour. НО!!! Натолкнулся на ряд технических и организационных проблем... Главная из которых отсутствие в "удобном" доступе документации и весьма полезных инструкций/программ (на русском языке), хотя они имеются в наличии, как правило авторы размещают их в хранилищах с ограниченным сроком хранения и мои попытки скачать их натыкаются на сообщение "файл удалён из хранилища". ПРЕДЛОЖЕНИЕ: На своём сайте могу сделать страницу со ссылками на полезные программы и документацию, а так же разместить на сайте архивы данной (весьма полезной информации), выделив под это до 100mb (хостинг халявный и ограниченный по размеру). Для этого пришлите мне пожалуйста на почту zhsoft///@///mail.ru копии архивов документации с кратким оглавление и авторством. В частности руссификацию xMate, инструкцию по переводу приложений, какую нибудь документацию по языку и RDD и т.д. ВОПРОСЫ 1. Правильно ли понял, что заброшены многие полезные проекты под Harbour типа miniGui, xMate, hwGui и что это "нормальная практика" развития проекта Harbour? 2. Пожалуйста предложите "свободную" связку для создания графических приложений одновременно под Win32/64/Linux типа FrameWork+Gui+[x]Harbour+ReportSystem+RddSQL(free), но которая развивается по настоящее время и существует хотя бы 3 года, например, как понял возможен вариант xMate + hwGui + xHarbour, но всё кроме Harb брошено в 1996 году, т.е. неперспективно. 3. Натолкнулся на ряд несовместимостей (в препроцессоре, использовании "внешних" функций на C)! Если не сложно - приведите другие примеры несовместимости и глюков [x]Harbour, которые необходимо "особо" обходить! Важная мелочь? Что проблема работы с 866 кодировкой в Upper/Lower не решена? Это критично, т.к. используется в индексах, да и предполагаю продолжать развитие Clipper проекта, постепенно убирая несовместимости с Harbour пока на 100% не буду уверен в "безглючности" Harbour. Что нет функции TempFile() из CT в xHarbour? Заранее спасибо за ответы!!!

Ответов - 139, стр: 1 2 3 4 5 6 7 All

Pasha: AndreyZh пишет: Что проблема работы с 866 кодировкой в Upper/Lower не решена? А разве есть какая-то проблема ? К слову. minigui жив, да и hwgui ожил в последнее время.

AndreyZh: А разве есть какая-то проблема ? Не работает xharbour последний релиз: индекс: Upper(name) запись: Вася Пупкин a:="вася" DbSeek(Upper(a)) // Не находит a:="Вася" DbSeek(a) // находит Да и тема была на форуме.

AndreyZh: В догонку посмотрел свои "свежие" скачки: hwGui - последнее описание от 2004 года (автору сейчас LetoDb, наверное интересно?) minGui - не увидел развития с 2006 года, хотя "версия" документации от 2009


Pasha: AndreyZh пишет: А разве есть какая-то проблема ? Не работает xharbour последний релиз: индекс: Upper(name) запись: Вася Пупкин a:="вася" DbSeek(Upper(a)) // Не находит a:="Вася" DbSeek(a) // находит Да и тема была на форуме. Кодовая страница подключена ? Надо выдать команды REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) какой результат выдает ? Upper('вася') ?

Pasha: AndreyZh пишет: В догонку посмотрел свои "свежие" скачки: hwGui - последнее описание от 2004 года (автору сейчас LetoDb, наверное интересно?) minGui - не увидел развития с 2006 года, хотя "версия" документации от 2009 По hwgui. Вы имеете в виду саму библиотеку или документацию к ней ? Если библиотеку, то несколько человек что-то по ней делают, 5 дней назад был коммит. По minigui. Загляните в раздел gui на этом форуме, Григорий же обновления постоянно выкладывает.

AndreyZh: Надо выдать команды REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) Проверил - не работает. xHarbour 1.2.1 Тема уже обсуждалась http://clipper.borda.ru/?1-4-0-00000385-000-0-0-1227168755 Что проблема не решена? Вот по - этому и открыл тему... Документации на русском почти ноль, на импортном - просто техническое описание функций, описание ошибок компиляции и времени выполнения вообще не нашел... А себя считаю разработчиком прикладных задач и ковыряние в чужом коде (особено системы разработки) не очень приятно. Раннее и сегодня попытался посмотреть miniGui/hwGUI, но она ориентированна на Harbour, т.е. на xHarbour не реагирует (конечно можно разобраться, но "не моё") и абсолютно непонятно: 1. Автор рускоязычный hwGui, а "корявые" и возможно неполные доки на английском. 2. Зачем мне для использования среды нужно собирать её из исходников? Что это спорт такой? Обратный пример: По описанию Верченко А. за 20 минут установил xHarbour и спокойно начал компилировать и использовать примеры программ, а через пару часов уже пытался работать со своей системой. 3. "Пробегала" ссылка на описание "для новичков" по этим системам и их руссификации - сейчас ни одна ссылка не работает!!!

Pasha: AndreyZh пишет: Проверил - не работает. xHarbour 1.2.1 Тема уже обсуждалась http://clipper.borda.ru/?1-4-0-00000385-000-0-0-1227168755 Что проблема не решена? Я просто забыл об этом, все-таки полтора года назад тема была Вроде бы исправлено почти год назад: 2009-04-14 13:12 UTC+0300 Phil Krylov <phil a t newstar.rinet.ru> * include/hbexprb.c * include/hbexprop.h * source/common/expropt2.c ! restored Mindaugas code for UPPER optimization and added logic to optimize UPPER for strings with only Latin letters, digit and spaces just like in Clipper. Now code like: ? Upper( chr(65)+chr(66)+chr(67)+"0123 QWE asd " ) + "ZXC" is fully optimized at compile time to single string expression. (by Przemyslaw Czerpak and Mindaugas Kavaliauskas, borrowed from Harbour) * include/hbclass.ch * Some comment typos fixed.

AndreyZh: Я просто забыл об этом, все-таки полтора года назад тема была Вроде бы исправлено почти год назад: Как понять и воспользоваться сообщением - не понял! Увы! Даже проблема в такой мелочи? Пример SS

Dima: Pasha пишет: Надо выдать команды REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) какой результат выдает ? Upper('вася') ? Да проходили же уже эту тему ;) Proc main Local a:='вася' REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) ? Upper(a) // так работает ? Upper('вася') // не пашет return

Dima: Dima пишет: ? Upper('вася') // не пашет Кстати маловероятно что подобный код будет использоваться в реальной программе.

Dima: AndreyZh пишет: Что нет функции TempFile() из CT в xHarbour? В Libnf.lib есть В прочем и самому ее написать не составит особого труда.

Pasha: AndreyZh пишет: Как понять и воспользоваться сообщением - не понял! Увы! Даже проблема в такой мелочи? Да все просто. Фил исправил этот баг в upper 24.4.2009. У Вас, по видимому сборка xHarbour более ранняя, в которой баг еще есть Вывод: надо использовать сборку после этой даты. Поскольку релиза после марта 2009 кажется не было, надо собрать xHb самому (ничего в этом военного нет), или найти уже готовую сборку. Их время от времени кто-нибудь выкладывает, даже на этом форуме

Dima: Pasha Ни чего не исправлено. Сливал исходники пару дней назад и пересобирал Xharbour ? Upper('вася') // выдает вася

AndreyZh: Кстати маловероятно что подобный код будет использоваться в реальной программе Выше пояснял, что у меня индексы Upper(name), по которым осуществляется поиск и работа, т.е. мне нужная родная функция, но это мелочь - больше волнует сколько "ещё открытий чудных" может ожидать при использовании xHarbour. В Libnf.lib есть А шо она тогда не цепляется при сборке приложения? В прочем и самому ее написать не составит особого труда Спасибо - но уже и сам написал (давно и для CT III где этот глюк уже присутствовал). НО мне нужна полная совместимость Clipper (буду модифицировать) и xHarbour приложений и здесь уже сложности - самописка TempFile существенно более тормозная и слишком активно используемая. Да все просто. Фил исправил этот баг в upper 24.4.2009. У Вас, по видимому сборка xHarbour более ранняя, в которой баг еще есть Вывод: надо использовать сборку после этой даты. Поскольку релиза после марта 2009 кажется не было, надо собрать xHb самому (ничего в этом военного нет), или найти уже готовую сборку 1. Не увидев ответа сам поискал на буржуйских сайтах - проблема не решена (до 25.02.2010) и самое "лучшее" предложение заменить "приложенным" C модулем, соответствующий модуль xHarbour и пересобрать проект, т.е. компилятор превращать в самописку. 2. Свежее, чем у меня официальных сборок xHarbour - НЕТ. Использовать самосборки - как потом контролировать инструмент. 3. Уже пояснил, что не любитель "системного" программирования, да и времени на это не очень много....

Dima: AndreyZh пишет: А шо она тогда не цепляется при сборке приложения? а чего бы ей самой цепляться ;))) Прицепи сам. У тебя же в Clipper , доп библиотеки сами не цепляются.

AndreyZh: Dima. Спасибо! Думал, что в xHarbour "всё включено". Еще "несовместимость": На Clipper конструкция работает (компилируется), а в xHarbour НЕТ: local ... <блок программы> priv oVar oVar := ... Но работает конструкция: local ... priv oVar <блок программы> oVar := ...

Dima: AndreyZh Проверил , компилятся оба варианта.

AndreyZh: Извините! Вылетает при выполнении - пример исправленного кода: * Головной модуль. Обслуживание списка накладных. PROC pReceipts() LOCA sOp:="0200", cOldCol:=SetColor(), nKeys:=0, nCount:=0, aArr:={} **** Так работает PRIV oTb S_PROC J_OPEN pInvOrder() // Начали. SELE RECEIPTS ORDE nOrder REC nRecno DbSkip(-1) *** а так порождает ошибку времени выполнения PRIV oTb // Открываем окно просмотра списка. fSwopen(0,0,24,79,cColor,3) @ 0,44 SAY " Накладные на приход от поставщика " COLOR cMainc @ 6,0 SAY Chr(195)+Repl(Chr(196),78)+Chr(180) @ 8,0 SAY Chr(195)+Repl(Chr(196),78)+Chr(180) oTB := TBRowseDB(7,1,23,78) oTB:headSep := Chr(196) oTB:addColumn( TBColumnNew("ДатаНак.|N_ накладной|КодН|О|СуммаСоСкид.|Отср.| Ост.оплата |КодД|Сч|З|О|Р|У|Г",{|| cDemoInvRR() }) ) // Описываю массив для вызова меню дополнительных задач. PRIV aArg:={{" Статистика по отобранной группе документов","pPrSwGrDoc(2)",FALSE},; ........... {"aF10 Снятие всех пометок по отбору док.в группу","pGroupObj(oTb,.F.)",TRUE}} DO WHIL TRUE #include "table.ch" **** Место вылета по ошибке DO CASE CASE nKeys == K_INS; IF lAddChInv( TRUE) THEN REF_INV // REC .............................. CASE nKeys == K_ESC; EXIT ENDC // Расчет числа позиций, отражаем наименование клиента и фамилию И.О. кладовщика. pStab(oTb) pDemoShap(cId) ENDD nOrder := zOrd() nRecno := RecNo() fDeact(cOldCol) pCloseJornal(sOp,1,"") RETU

Pasha: Dima пишет: Pasha Ни чего не исправлено. Сливал исходники пару дней назад и пересобирал Xharbour ? Upper('вася') // выдает вася Я тоже перепроверил - работет. По сырцам видно, что исправлено. Local cStr := 'Вася' REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) ? Upper('Вася') ? Upper(cStr) wait Оба вызова дают правильный результат Дима, собери маленький тест, и глянь получившийся файл *.с. Там должен быть вызов функции upper Тест вроде такого REQUEST HB_GT_WIN REQUEST HB_GT_WIN_DEFAULT function Main() REQUEST HB_CODEPAGE_RU866 hb_SetCodepage( "RU866" ) ? Upper('Вася') wait return nil Функция main в модуле с должны быть примерно такой: [pre]HB_FUNC( MAIN ) { static const BYTE pcode[] = { HB_P_MODULENAME, /* ua.prg:MAIN */ 'u', 'a', '.', 'p', 'r', 'g', ':', 'M', 'A', 'I', 'N', 0, /* 00013 */ HB_P_BASELINE, 7, 0, /* 7 */ HB_P_PUSHSYMNEAR, 4, /* HB_SETCODEPAGE */ HB_P_PUSHNIL, HB_P_PUSHSTRSHORT, 6, /* 6 */ 'R', 'U', '8', '6', '6', 0, HB_P_DOSHORT, 1, /* 00029 */ HB_P_LINEOFFSET, 1, /* 8 */ HB_P_PUSHSYMNEAR, 5, /* QOUT */ HB_P_PUSHNIL, HB_P_PUSHSYMNEAR, 6, /* UPPER */ HB_P_PUSHNIL, HB_P_PUSHSTRSHORT, 5, /* 5 */ 130, 160, 225, 239, 0, HB_P_FUNCTIONSHORT, 1, HB_P_DOSHORT, 1, /* 00048 */ HB_P_LINEOFFSET, 3, /* 10 */ HB_P_PUSHSYMNEAR, 7, /* __WAIT */ HB_P_PUSHNIL, HB_P_DOSHORT, 0, /* 00055 */ HB_P_LINEOFFSET, 4, /* 11 */ HB_P_PUSHNIL, HB_P_RETVALUE, HB_P_ENDPROC /* 00060 */ }; hb_vmExecute( pcode, symbols ); } [/pre] Проблеме была в том, что компилятор выбрасывал вызов upper, и пытался оптимизировать строку-константу сам, и без нужной кодовой страницы делал это неправильно.

AndreyZh: Опять наврал! Назначал после использования (на Clipper прокатывало) oTB := TBRowseDB(7,1,23,78) oTB:headSep := Chr(196) oTB:addColumn( TBColumnNew("ДатаНак.|N_ накладной|КодН|О|СуммаСоСкид.|Отср.| Ост.оплата |КодД|Сч|З|О|Р|У|Г",{|| cDemoInvRR() }) ) PRIV oTb



полная версия страницы