Автор | Сообщение |
|
| |
Пост N: 86
Зарегистрирован: 08.07.06
|
|
Отправлено: 11.08.13 18:47. Заголовок: Перехожу с Clipper 5.2e на Harbour, список вопросов от "новичка"
Добрый день, уважаемые коллеги. Большое спасибо за море справочной информации по переходу, но нужно ещё пнуть меня в нужном направлении. Итак, установил Harbour 3.0 + BCC 5.5.1 ==>> 3.2.0 +minGW скомпилировал и запустил традиционный "Hello, world!" Дело перешло к проекту, из-за которого собственно и речь. Компилируется что через hbmk2, что самим харбором - без ошибок, всего с парой предупреждений, что меня немало удивило. Возникли ошибки на этапе линковки: Скрытый текст 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 активно используется в других модулях - но там линкер почему-то ошибок не видит...
| Help, please - что делать и куды бечь ?
|
|
|
Ответов - 285
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|
| |
Пост N: 3536
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.09.13 22:42. Заголовок: Sergy пишет: символ..
Sergy пишет: цитата: | символы CHR(16) заменяются на "?" и соотв. выводятся назад уже не в виде треугольников, а в виде знаков вопроса. |
| Простой и понятный исходник сюда. У себя такого не наблюдал. PS GTWVT
|
|
|
|
| Администратор
|
Пост N: 2975
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.09.13 23:01. Заголовок: Sergy пишет: А може..
Sergy пишет: цитата: | А может быть какая-нибудь петрушка с SAVESCREEN / RESTSCREEN ? |
| Совершенно непонятно, в чем заключается ваша проблема. Разве трудно сделать простейшие тесты, чтобы проверить, как работает кодовая страница в rdd, вроде такого: REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) dbCreate('aa', {{'CC','C',1,0}},, .t., 'aa',, 'RU866') for i := 0 to 255 aa->(dbAppend()) aa->CC := Chr(i) next и посмотреть на выходной файл ? Да и протестировать savescreen/restscreen ? @ 0,0 say chr(16) cc := SaveScreen(0,0,0,0) RestScreen(0,2,0,2,cc)
|
|
|
|
| |
Пост N: 35
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.09.13 06:49. Заголовок: chr(16) - треугольник, это из Dos(Clipper)
Нет никакой перекодировки и треугольника уже нет Просто в используемом Вами шрифте на этом месте другое изображение. Есть стандартноая утилита Windows TableMap ( Пуск\Все программы\Служебные\Таблица символов) Если треугольник сильно нужен, можно создать свой шрифт.
|
|
|
|
| |
Пост N: 268
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 09:36. Заголовок: Все эти выкладки кон..
Все эти выкладки конечно здорово, но факт остается фактом... :( По поводу шрифта - тестировал Lucida Console. Эффект повторяется 1:1. 900 вызовов проходят нормально, а один - корявится. Поэтому пока не могу создать тест... Такая вот петрушка.
|
|
|
|
| Администратор
|
Пост N: 2976
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.09.13 10:00. Заголовок: Так огласите наконец..
Так огласите наконец-то, что за факт. Все телепаты в отпуске. Сначала вы говорили что-то перекодировку в use, потом про savescreen. Трудно отвечать на незаданный вопрос, а разгадывать шарады не хочется.
|
|
|
|
| |
Пост N: 269
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 10:11. Заголовок: Pasha пишет: Так ог..
Pasha пишет: цитата: | Так огласите наконец-то, что за факт. Все телепаты в отпуске. Сначала вы говорили что-то перекодировку в use, потом про savescreen. Трудно отвечать на незаданный вопрос, а разгадывать шарады не хочется. |
| Есть функция SaveConsole(), которая делает SAVESCREEN и кладет его в локальную DBF таблицу, чтобы не расходовать память. Ровно в одном месте программы в таблицу стали попадать символы "?" вместо CHR(16). И соотв. при восстановлении экрана в RestConsole() происходит RESTSCREEN(0,0,MAXROW(),MAXCOL(), console->buffer) Ровно в одном месте программы. Первая мысль была на USE ... CODEPAGE. Спросил, знающий человек быстро откликнулся (за что ему спасибо), проверил - не помогло. Стал копать дальше. Оказывается, SAVESCREEN именно в этом месте программы возвращает "испорченные" коды. Которые попадают в таблицу и USE уже ни причем - он пишет в таблицу то, что ему вернул SAVESCREEN(). Во всей программе все работает как нужно. В этом, одном, единственном месте, написанном на чистом Clipper безо всяких наворотов - такая вот петрушка... Поэтому, собственно, пока единственный вопрос - были ли у кого-нить на Harbour проблемы с SAVESCREEN() / RESTSCREEN() или нет.
|
|
|
|
| постоянный участник
|
Пост N: 928
Зарегистрирован: 27.01.07
|
|
Отправлено: 09.09.13 10:30. Заголовок: Я никогда, даже во в..
Я никогда, даже во времена работы с Клиппером, не сохранял экраны в dbf. Просто делал сохранение в массив, выполнявший роль стека LIFO (last in first out). Даже с Клиппером память ни разу не исчерпалась.
|
|
|
|
| |
Пост N: 3537
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.09.13 10:36. Заголовок: PSP пишет: Я никогд..
PSP пишет: цитата: | Я никогда, даже во времена работы с Клиппером, не сохранял экраны в dbf. |
| +1
|
|
|
|
| |
Пост N: 36
Зарегистрирован: 21.04.13
|
|
Отправлено: 09.09.13 10:56. Заголовок: символы "?" вместо CHR(16) - это несравнимо по определению
символы "?" ( это картинка) вместо CHR(16) ( а это - число,байт,...) Либо - символы "?" вместо символа "x" , либо CHR(n) вместо CHR(16) Сохраняейте в бинарный файл (типа TXT) и смотрите содержимое любым Hex-вьюером(editor)
|
|
|
|
| |
Пост N: 270
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 11:06. Заголовок: PSP пишет: Я никогд..
PSP пишет: цитата: | Я никогда, даже во времена работы с Клиппером, не сохранял экраны в dbf. Просто делал сохранение в массив, выполнявший роль стека LIFO (last in first out). Даже с Клиппером память ни разу не исчерпалась. |
| Выключить эту опцию сегодня - дело трех строчек кода. Наверное так и сделаю. Но это пока не решает этого мелкого вопросика, о котором речь. petr707 пишет: цитата: | символы "?" ( это картинка) вместо CHR(16) ( а это - число,байт,...) Либо - символы "?" вместо символа "x" , либо CHR(n) вместо CHR(16) Сохраняейте в бинарный файл (типа TXT) и смотрите содержимое любым Hex-вьюером(editor) |
| Символ CHR(16) - это такой треугольник, который изображает, что данный пункт имеет вложенное подменю. Например: " Документы >" при выборе этого пункта вызывается меню с документами. После SAVESCREEN/RESTSCREEN получается так: " Документы ?" т.е. вместо CHR(16) получается CHR(63) - как раз выяснилось из сравнения слитых в txt результатов SAVESCREEN() Надеюсь, что понятно объяснил.
|
|
|
|
| постоянный участник
|
Пост N: 929
Зарегистрирован: 27.01.07
|
|
Отправлено: 09.09.13 11:14. Заголовок: А какой тип поля в d..
А какой тип поля в dbf?
|
|
|
|
|
| Администратор
|
Пост N: 2977
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.09.13 11:32. Заголовок: Символ CHR(16) - это..
цитата: | Символ CHR(16) - это такой треугольник, который изображает, что данный пункт имеет вложенное подменю. Например: "Документы >" при выборе этого пункта вызывается меню с документами. |
| Я точно также отмечаю меню с подменю символом Chr(16), и тоже использую при этом savescreen/restscreen. Правда, сохраняю все в структурах типа стек. Проблем не возникало.
|
|
|
|
| |
Пост N: 271
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 12:28. Заголовок: PSP пишет: А какой ..
PSP пишет: CHAR, с размером ширина*высота экрана * 2 (для атрибутов) Pasha пишет: цитата: | Я точно также отмечаю меню с подменю символом Chr(16), и тоже использую при этом savescreen/restscreen. Правда, сохраняю все в структурах типа стек. Проблем не возникало. |
| Сейчас стало совершенно понятно, что структуры точно не причем. RESTSCREEN() возвращает вместо треугольника знак вопроса.
|
|
|
|
| |
Пост N: 926
Зарегистрирован: 11.06.10
|
|
Отправлено: 09.09.13 12:52. Заголовок: Sergy пишет: RESTSC..
Sergy пишет: цитата: | RESTSCREEN() возвращает вместо треугольника знак вопроса. |
|
Самодостаточный пример в студию, как говорится.
|
|
|
|
| |
Пост N: 3538
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.09.13 13:47. Заголовок: Sergy А вот так буд..
Sergy А вот так будут BAD ? ;) proc main local csave local csave1 local i cls for i=1 to 10000 @ 10,10 say chr(16) color "gr+/r" csave:=savescreen(10,10,10,10) if left(csave,1)#chr(16) ? "Bad Savescreen " wait endif @ 10,10 say " " color "n/n" restscreen(10,10,10,10,csave) csave1:=savescreen(10,10,10,10) if left(csave1,1)#chr(16) ? "Bad Restscreen" wait endif next return
|
|
|
|
| |
Пост N: 272
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 13:59. Заголовок: AlexMyr пишет: Само..
AlexMyr пишет: цитата: | Самодостаточный пример в студию, как говорится. |
| Если-бы было все так просто... Из нескольких сотен вызовов SAVESCREEN/RESTSCREEN все работает ровно. Заковыка только в одном-единственном. Может еще где есть в программе - там вызовов десятки, если не сотни разбросаны. Ведь все происходит довольно быстро: SAVESCREEN - диалог - RESTSCREEN и практически сразу идет перепрорисовка меню. Заметить сложно. Пока вычислил один, но совершенно точно - врет... Либо глюк. Dima пишет: цитата: | Sergy А вот так будут BAD ? |
| Вечером смогу ответить.
|
|
|
|
| постоянный участник
|
Пост N: 930
Зарегистрирован: 27.01.07
|
|
Отправлено: 09.09.13 14:13. Заголовок: Sergy пишет: Заковы..
Sergy пишет: цитата: | Заковыка только в одном-единственном |
| Пошагово выполнить программу. Может там действительно перед выполнением savescreen() знаки вопроса на экране.
|
|
|
|
| |
Пост N: 273
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 22:21. Заголовок: Dima пишет: Sergy ..
Dima пишет: цитата: | Sergy А вот так будут BAD ? |
| Не очень понял смысла кода (память/видеоадаптер проверялся что-ли...), но ни одной надписи "Bad savescreen" не получил.
|
|
|
|
| |
Пост N: 3539
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.09.13 22:30. Заголовок: Sergy Думаю где то ..
Sergy Думаю где то твой косяк , просто подумай где он. У меня тоже при переводе программы на Harbour c Сlipper был глюк который не мог долго поймать. Психовал даже маленько ;) Но поймал. PS на форуме таких примеров при "переводе" достаточно, о якобы глюках Harbour.
|
|
|
|
| |
Пост N: 274
Зарегистрирован: 08.07.06
|
|
Отправлено: 09.09.13 22:53. Заголовок: PSP пишет: Пошагово..
PSP пишет: цитата: | Пошагово выполнить программу. |
| Так и сделал. И акуел, если честно: Скрытый текст
FUNC Main() LOCAL i,sx,cBuffer1,cBuffer2 REQUEST HB_LANG_RU866 REQUEST HB_CODEPAGE_RU866 HB_LANGSELECT("RU866") HB_CDPSELECT("RU866") CLEAR SCREEN sx:="" FOR i:=1 TO 30 sx += CHR(i) NEXT i @ 10,10 SAY sx cBuffer1 := SAVESCREEN(0,0,MAXROW(),MAXCOL()) INKEY(0) RUN("dir >nul") // Проблема оказалась тут... cBuffer2 := SAVESCREEN(0,0,MAXROW(),MAXCOL()) RESTSCREEN(0,0,MAXROW(),MAXCOL(),cBuffer2) @ 12,10 SAY "Two screens are " + IIF(cBuffer1 == cBuffer2,"EQUAL","DIFFERENT") INKEY(0) RETURN
| Загвоздка оказалась в команде RUN. Как она может повлиять на SAVESCREEN() - ума не приложу.
|
|
|
Ответов - 285
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|