Форум » [x]Harbour » Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка" » Ответить

Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка"

Sergy: Добрый день, уважаемые коллеги. Большое спасибо за море справочной информации по переходу, но нужно ещё пнуть меня в нужном направлении. Итак, установил Harbour 3.0 + BCC 5.5.1 ==>> 3.2.0 +minGW скомпилировал и запустил традиционный "Hello, world!" Дело перешло к проекту, из-за которого собственно и речь. Компилируется что через hbmk2, что самим харбором - без ошибок, всего с парой предупреждений, что меня немало удивило. Возникли ошибки на этапе линковки: [more]Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_ENVPARAM' referenced from D:\HB\TRADE100.OBJ Error: Unresolved external '_HB_FUN_INKEYTRAP' referenced from D:\HB\TRADE226.OBJ Error: Unresolved external '_HB_FUN_DISKFREE' referenced from D:\HB\TRADE222.OBJ Error: Unresolved external '_HB_FUN_DISKTOTAL' referenced from D:\HB\TRADE222.OBJ Error: Unresolved external '_HB_FUN_BIOSDATE' referenced from D:\HB\TRADE.OBJ Error: Unresolved external '_HB_FUN_FT_ONTICK' referenced from D:\HB\TRADE.OBJ Error: Unresolved external '_HB_FUN_FT_ONIDLE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_FT_IAMIDLE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_TRAPANYKEY' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_KEYSEND' referenced from D:\HB\TRADE200.OBJ 1) Так понимаю, это ошибки из-за того, что не находятся некоторые функции из активно используемых CT3/Nanforum Toolkit ? Что делать с ними ? Отказываться ? Или есть заменители ? Error: Unresolved external '_HB_FUN_STACKFREE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCUSE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCAVL' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLILOCTOT' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCUSE' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCAVL' referenced from D:\HB\TRADE200.OBJ Error: Unresolved external '_HB_FUN_BLISTCTOT' referenced from D:\HB\TRADE200.OBJ 2) Это - ошибки из-за вызовов встроенных в Blinker функций, без них легко обойтись в принципе... Error: Unresolved external '_HB_FUN_STRNUM2ARRAY' referenced from D:\HB\TRADE208.OBJ Error: Unresolved external '_HB_FUN_CMJS_EXTRACTPARAMS' referenced from D:\HB\TRADE206.OBJ Error: Unresolved external '_HB_FUN_SELECTSTOCKS' referenced from D:\HB\TRADE220.OBJ Error: Unresolved external '_HB_FUN_APPLYSERTCHAGES' referenced from D:\HB\TRADE221.OBJ Error: Unresolved external '_HB_FUN_APPLYCARGOCHAGES' referenced from D:\HB\TRADE221.OBJ Error: Unresolved external '_HB_FUN_APPLYPRICECHAGES' referenced from D:\HB\TRADE221.OBJ 3) А вот это - самое странное - это мои функции, причем некоторые из них вызываются многократно из других модулей. Например ApplyCargoChanges является STATIC в самом модуле TRADE221 - почему линковщик ее не видит, наряду с парой Apply... других ? SelectStocks активно используется в других модулях - но там линкер почему-то ошибок не видит... [/more] Help, please - что делать и куды бечь ?

Ответов - 285, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Sergy: Andrey пишет: Это CT.LIB Я отказался от неё. Понятно, что у виндовой программы и расширенного Harbour всяко функций больше. Но сейчас нужно запустить проект и посмотреть, где что да как. Dima пишет: Тяжелый случай. Тяжело и громоздко. Не надо его юзать. CDX самое то или IDX (CDX) под ADS или LetoDB (CDX) Переделывать NTX на CDX или еще дальше - SQL подобные БД вообще думаю пока нет смысла, когда программа "еле дышит"... Запустить, попробовать, добиться хотя-бы такого-же функционала, как и с 5,2е, обкатать, а потом уж оптимзировать. Такие вот мысли пока...

Dima: Sergy пишет: Запустить, попробовать, добиться хотя-бы такого-же функционала, как и с 5,2е, обкатать, а потом уж оптимзировать. Все правильно. Так и я думал и все получилось и у тебя все будет нормально с переводом. Просто остынь и осмысли А вопросы сюда ;) Поможем ! ЗЫ Я тоже не верил что смогу перевести довольно большую прогу с Clipper 5.2 на Harbor , но.......5 дней упорной работы и добился такого же функционала 5 метров исходников , 300 файлов , пришлось попотеть конечно. Руки не опускай и все будет норм ! По ходу косяков будет много по началу но со временем все меньше и меньше. Просто поверь.

Sergy: Dima пишет: Выведи это дело в ? cDir+cAlias+cExt и глянь что кажет , возможно твой косяк Мой. удалил клипперовские *.NTX, а - *.XNT - остались... Удалил, перестроились ок. Сорри.


Sergy: Dima пишет: Все правильно. Так и я думал и все получилось и у тебя все будет нормально с переводом. Просто остынь и осмысли А вопросы сюда ;) Поможем ! А вот за это - отдельное БОЛЬШОЕ Спасибо! ЗЫ Я тоже не верил что смогу перевести довольно большую прогу с Clipper 5.2 на Harbor , но.......5 дней упорной работы и добился такого же функционала 5 метров исходников , 300 файлов , пришлось попотеть конечно. Руки не опускай и все будет норм ! По ходу косяков будет много по началу но со временем все меньше и меньше. Просто поверь. У меня чуть скромнее: 34 файла, 2,5 мега исходников. Всегда старался не пользоваться никакими сторонними библиотеками, кроме стандартных Nanforun Toolkit и Clipper Tools - подозревал, что этот день когда-нить настанет... В первом приближении - Работает!!! И ТАК БЫСТРО, что ппц.

Sergy: Итак, огромное спасибо всем помощникам! Программа запустилась и очень шустро (по сравнению с ntvdm) работает. Возникающие то тут, то там вопросы - решаемы, связаны с вольностями Clipper - все, что дальше десятого символа считается неважным. На повестке дня пока два насущных вопроса, связанных с отказом от нескольких системных функций: 1) В программе есть возможность записи клавиатурных нажатий. Типа макросов. И последующего их воспроизведения одним нажатием для автоматизации рутинных операций. Раньше это было организовано при помощи INKEYTRAP/TRAPANYKEY/KEYSEND. Одна из этих функций актвивизировалась и складывала в фоновом режиме все нажатия юзера в массив/строку. После чего в любой момент из массива/строки при помощи KEYSEND эти коды кнопок передавались в буфер клавиатуры. Просто и удобно. Как можно релизовать похожий механизм в Harbour ? 2) Нужен аналог функции BIOSDATE(), она используется сами понимаете для чего. Отказываться полностью не хочется, а использовать что-либо взамен - придется бегать по всем машинам с флэшкой, переделывать ключевые файлы.

Dima: Sergy пишет: Нужен аналог функции BIOSDATE() [pre2] Func Biosdate() #include "hbwin.ch" return GetRegistry( WIN_HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System" ,"SystemBiosDate" ) [/pre2]

Sergy: Dima пишет: Func Biosdate() #include "hbwin.ch" return GetRegistry( WIN_HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System" ,"SystemBiosDate" ) Спасибо, использую

Dima: Sergy Можно еще к MAC адресу сетевой прицепиться.

Sergy: Dima пишет: Можно еще к MAC адресу сетевой прицепиться. Безусловно, только сейчас первая задача - сохранить и перенести функционал. И только потом развиваться дальше. Вот с клавиатурными нажатиями - с какой стороны подступить ?

Dima: Sergy пишет: Вот с клавиатурными нажатиями - с какой стороны подступить ? Можно попробовать FT_OnTick({|| test()},1) в функции Test и пробуй записывать Или ваять самому https://groups.google.com/forum/#!topic/comp.lang.xharbour/e77vVVb1Kuc

Sergy: Dima пишет: Можно попробовать FT_OnTick({|| test()},1) в функции Test и пробуй записывать Или ваять самому https://groups.google.com/forum/#!topic/comp.lang.xharbour/e77vVVb1Kuc Буду пробовать...

Sergy: Dima пишет: Func Biosdate() #include "hbwin.ch" return GetRegistry( WIN_HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System" ,"SystemBiosDate" ) Error: Unresolved external '_HB_FUN_GETREGISTRY' referenced from... хотя в проект hbwin.hbc подключил...

Dima: Sergy пишет: Error: Unresolved external '_HB_FUN_GETREGISTRY' referenced from. попробуй win_regGet() У меня Harbour 3.2 у тебя 3.0 вот и отличия ЗЫ Можно еще сырец глянуть win_reg.prg из Hbwin

Sergy: Dima пишет: попробуй win_regGet() У меня Harbour 3.2 у тебя 3.0 вот и отличия Получилось.

Sergy: Заметил, что ACHOICE себя как-то странно ведет. Суть: REPEAT pos := ACHOICE(2,10,2,40,show_array,,,pos) UNTIL (LastKey() == K_ENTER) Да, весь массив в Clipper прокручивается в одной строке - так выбираю логин входящего юзера, чтобы не вводить с клавиатуры. Компактно и поиск по первой букве работает. Плюс стрелками можно выбрать: Savin -> Serebrov -> Silaev... В Harbour при нажатии "стрелка вверх" неожиданно появляется второй элемент массива на третьей строке, т.е. там, где ACHOICE делать вообще нечего... Залез в tests\ac_test.prg /* * $Id: ac_test.prg 16875 2011-06-14 20:10:06Z vszakats $ */ *+==================================================================== *+ *+ Source Module => ac_test.prg *+ *+ Released to Public Domain. *+ *+ Functions: Procedure test() *+ Function cUserFunction() *+ *+ Tables: use vendor exclusive *+ *+ Reformatted by Click! 1.10 on Aug-13-1997 at 11:39 pm *+ *+==================================================================== #include "achoice.ch" #include "inkey.ch" *+-------------------------------------------------------------------- *+ *+ Procedure test() *+ *+-------------------------------------------------------------------- *+ procedure main() local aPrompts := {; "AGRI-PLANTS" ,; "ALAN R. SMITH GREENHOUSES" ,; "ALLAN MURRAY NURSERY, INC." ,; "APOPKA FOREST" ,; "LIGHT HOUSE NURSERIES" ,; "BAUCOM'S" ,; "BAY HILL NURSERY, INC." ,; "BAYWOOD NURSERIES" ,; "BIG OAK NURSERY" ,; "C & N NURSERY" ,; "CHARLES QUALITY PLANTS" ,; "CONNELL FARMS" ,; "DEWAR NURSERIES, INC." ,; "DIAMOND T NURSERY" ,; "DISTINCTIVE PALMS NURSERIES" ,; "DONKAY NURSERY" ,; "DOUG INGRAM & SONS NURSERY" ,; "DRIFTWOOD GARDENS, INC." ,; "ELVA PLANT NURSERY, INC." ,; "ERINON" ,; "EVANS NURSERY" ,; "FANCY PLANTS" ,; "FL.PLANT GROWERSCOOP" ,; "FLORIDA CACTUS INC." ,; "FLOWERING TREE GROWERS, INC." ,; "FLOWERWOOD NURSERY" ,; "FOLIAGE FACTORY TOO" ,; "GATOR GROWERS NURSERY, INC." ,; "GAZEBO LANDSCAPE DESIGN, INC." ,; "GEM ORNAMENTALS" ,; "GRANNY'S GARDEN" ,; "GRAY'S ORNAMENTALS" ,; "GREEN MASTERS INC." ,; "GREEN MEADOW NURSERY" ,; "PIXLEY'S PLANT PLACE" ,; "HARRISON'S NURSERY, INC." ,; "G & G FOLIAGE" ,; "IVEY'S NURSERY, INC." ,; "JB NURSERIES, INC." ,; "JON'S NURSERY" ,; "JONES & JONES NURSERY, INC." ,; "KAGER'S NURSERY" ,; "KIRKLAND'S NURSERY" ,; "LAND OF BROMELIADS" ,; "LANDSCAPE NURSERY, INC." ,; "LIEWALD'S NURSERY INC." ,; "LLOYD & RINGS NURSERY" ,; "LONG VAN DOUNG" ,; "MAPEL'S LANDSCAPE NURSERY" ,; "MILESTONE AGRICULTURE, INC." ,; "MOJICA NURSERY & FRUITS" ,; "NELSON'S ROSES" ,; "PARK GARDENS" ,; "PAUL LUKAS INC." ,; "PECKETT'S INC." ,; "PENANG NURSERY, INC." ,; "PINES III NURERIES" ,; "PINEVIEW NURSERY" ,; "POUL JENSEN NURSERY" ,; "R.P. WELKER" ,; "RICHARD ROGERS NURSERY, INC." ,; "SPRING HILL NURSERY" ,; "T.O. MAHAFFEY, JR." ,; "TUCKER NURSERY" ,; "TURTLE POND NURSERY" ,; "TUTTLE'S NURSERY INC." ,; "VALLEY CACTUS" ,; "WHISPER WINDS, INC." ,; "WHITE ROSE NURSERIES INC." ,; "WOODWAY" ,; "FLORI-DESIGN" ,; "GREEN ACRES FOLIAGE, INC" ,; "FLORAL EXPO" ,; "TORRES NURSERY" ,; "DARRYL KOON" ,; "TRISTAR NURSERY" ,; "KAY WEST NURSERY" ,; "JAYMAR NURSERY" ,; "J D F LANDSCAPE NURSERY" ,; "DEROOSE PLANTS, INC." ,; "THE TREEHOUSE" ,; "COSTELLO'S ARECAS, INC." ,; "FLORICO FOLIAGE" ,; "THE NATIVES" ,; "GREENS NURSERY" ,; "STEWART NURSERIES" ,; "G & T FOLIAGE, INC." ,; "GOOD TIMES NURSERY" ,; "CONCEPTS IN GREENERY, INC." ,; "DUNN BROTHERS CITRUS, INC." ,; "JOHN PLANK GREENHOUSES" ,; "GREENER PASTURES NURSERY" ,; "MULVEHILL NURSERY" ,; "A NU LEAF" ,; "IVY DESIGNS, INC." ,; "B & C TROPICALS" ,; "SPANISH RIVER NURSERY, INC." ,; "JACK CHRISTMAS & ASSOCIATES" ,; "SPECIALIST GROWERS" ,; "HOMRICH NURSERY, INC." ,; "COUNTRYSIDE FOLIAGE, INC." ,; "RFJ COMPANY" ,; "LAKE BRANTLEY PLANT CORP." ,; "MARISTYME" ,; "MERISTEM NURSERY, INC." ,; "TROPIC DECOR - EARL WILSON" ,; "URQUHART'S NURSERY" ,; "ACE PLANT NURSERY" ,; "HATTAWAYS GREENHOUSE, INC." ,; "Florida Plant Growers" ,; "Junior Nursery" ,; "Fox's Nurseries, Inc." ,; "Vaughan Nursery" ,; "MERRYGRO FARMS" ,; "ALL SEASONS NURSERY" ,; "BENCHMARK FOLIAGE" ,; "SAMMY'S NURSERY" ,; "SUNSHINE GROWERS" ,; "Blooming-Fields Nursery" } local aPermits := {} local x local nChoice local ncntr clear screen setcolor( 'GB+/B,GR+/R,,,W/N' ) SET CURSOR ON asize( aPermits, Len( aPrompts ) ) for x := 1 to Len( aPrompts ) aPermits[ x ] := !( 'V' $ aPrompts[ x ] ) next #define TEST1 #ifdef TEST1 for ncntr := 1 to 17 aPermits[ nCntr ] := .F. aPermits[ Len( aPrompts ) - nCntr + 1 ] := .F. next aPermits[ 32 ] := .F. aPermits[ 33 ] := .F. aPermits[ 34 ] := .F. #endif nChoice := achoice( 5, 10, 20, 70, aPrompts, aPermits, "cUserFunction" ) setpos( 0, 0 ) * clear screen ? nChoice if nChoice > 0 ? aPrompts[ nChoice ] endif setpos( maxrow() - 2, 0 ) return *+-------------------------------------------------------------------- *+ *+ Function cUserFunction() *+ *+-------------------------------------------------------------------- *+ function cUserFunction( nMode, nCurElement, nRowPos ) local nRetVal := AC_CONT // Default, Continue local nKey := lastkey() local nRow := Row() local nCol := Col() HB_SYMBOL_UNUSED( nRowPos ) @ 0, 20 SAY Str( nRow, 3 ) + " " + Str( nCol, 3 ) do case // After all pending keys are processed, display message case nMode == AC_IDLE @ 0, 0 say padr( ltrim( str( nCurElement ) ), 10 ) nRetVal := AC_CONT // Continue ACHOICE() case nMode == AC_HITTOP // Attempt to go past Top @ 0, 0 say "Hit Top " // tone( 100, 3 ) case nMode == AC_HITBOTTOM // Attempt to go past Bottom @ 0, 0 say "Hit Bottom" // tone( 100, 3 ) case nMode == AC_EXCEPT // Key Exception @ 0, 0 say "Exception " do case case nKey == K_RETURN // If RETURN key, select nRetVal := AC_SELECT case nKey == K_ESC // If ESCAPE key, abort nRetVal := AC_ABORT otherwise nRetVal := AC_GOTO // Otherwise, go to item endcase endcase return nRetVal Запустил, офигел: У всех так ? Второй файл, ac_test2 тоже работает через Ж...

Andrey: Sergy пишет: Заметил, что ACHOICE себя как-то странно ведет. Да, он от клипера отличается. Смотри доку и переделывай обработку функций ACHOICE, MEMOEDIT, TBROWSE. Мне тоже пришлось это переделывать. Разницу сейчас не скажу, но делал маленькие тестовые примеры, а потом код перетаскивал в свои системы.

Sergy: Andrey пишет: Смотри доку Какую именно доку ?

Andrey: Sergy пишет: Какую именно доку ? http://clipper.borda.ru/?1-6-0-00000007-000-0-0-1365407210 http://clipper.borda.ru/?1-6-0-00000004-000-0-0-1355750592 и т.д.

Sergy: Andrey пишет: http://clipper.borda.ru/?1-6-0-00000007-000-0-0-1365407210 http://clipper.borda.ru/?1-6-0-00000004-000-0-0-1355750592 и т.д. Вот смотрю конкретно ACHOICE: http://www.elektrosoft.it/tutorials/Harbour-Reference-Guide/harbour-reference-guide.htm#AChoice Не могу понять - какие в нем отличия от Клипперовского ? Ведь заявлена полная совместимость, а по сути получается, что просто криво реализована? Может у меня сборка такая, раз даже тестовый пример не работает...

PSP: Да, с AChoice косяк есть... Хех... В тех исходниках, что у меня (а они довольно старые, от 30.01.2013), в achoice.prg увидел следующее: [pre2]/* TOFIX: --- #include "inkey.ch" CLS hb_keyPut( { K_DOWN, K_UP } ) // bogus '2' appears out of the area here. AChoice( 0, 0, 0, 0, { "1", "2" } ) --- */ [/pre2] Так что баг уже давно замечен. Осталось, чтобы кто-то его вылечил... ))) У кого есть свежие исходники? Там не исправлено еще? update: Сечас посмотрел на git. Не исправлено... ((( Ну что ж, либо забить, либо искать косяк в achoice.prg и исправлять.



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