Форум

Перенос проекта на новую версию HMG

Dimka: вынужден поддерживать чужой старый проект на харборе версии ~0.6.5 rc 13 не имея особых навыков в этом. пробовал устанавливать различные новые версии харбор миниджиюай. не хочет компилироваться. постоянно возникают ошибки. реально ли перенести проект на новую версию. не могу, например, отдебажить ошибку: [quote] #include "minigui.ch" &&#INCLUDE "HMGPRINT.CH" *#INCLUDE "WINPRINT.CH" SET PROCEDURE TO "HMGPRINT.PRG" &&SET PROCEDURE TO "WINPRINT.PRG" #xtranslate VALID <condition> [ MESSAGE <message> ] [<INTERCL>] => ON LOSTFOCUS DoValid ( <condition> , <message> ,<INTERCL> ) ************************** Function DoValid ( Expression , Message , Intercl , NAMEWIN ) NAMEWIND:=NAMEWIN If _HMG_IsValidInProgres .OR. .NOT. EMPTY(Intercl) .OR. (.NOT. EMPTY(NAMEWIN) .AND. .NOT. ISWINDOWACTIVE(&NAMEWIND)) Return Nil Else If EMPTY( Message ) Message := RUS("�…„Ž�“‘’ˆŒŽ… ‡�?—…�ˆ… !") EndIf _HMG_IsValidInProgres := .T. If ( Expression , NIL , ( MsgSTOP (Message,RUS('Ž˜ˆ�Š?')) , This.SetFocus ) ) _HMG_IsValidInProgres := .F. EndIf Return Nil ******************* ... внутри окна @ INT(MXROW*7/10)+20,INT((MXCOL-260)/2)+160 textbox a1_t value 0; WIDTH 50 ; HEIGHT 20; FONT IFONT2 SIZE ISIZE2; BACKCOLOR GLCOLB; NUMERIC INPUTMASK "999"; ON GOTFOCUS SAST_1.B1.ENABLED:=.F.; ON GOTFOCUS SAST_1.B2.ENABLED:=.F.; ON LOSTFOCUS DOVALID((DOST->(DBSEEK(SAST_1.A1_T.VALUE))), RUS("�…‚…�…� ˆ„…�’ˆ”ˆŠ?’Ž�"), STO) ... [/quote] ошибка в последней строке: Error E0030 Syntax error: "syntax error at '@'"

Ответов - 17

Dimka: переписал. используется принтер. на HMG(расширенной версии) работает с такой строчкой: #INCLUDE "WINPRINT.CH" нормально печатает. при попытке откомпилировать на официальном HMG, выводит следующее: ♀Harbour 1.0.0 Intl. (Rev. 9175) Copyright (c) 1999-2008, http://www.harbour-project.org/ Compiling 'c:\programma.prg'... Lines 105165, Functions/Procedures 1196 Generating C source output to 'asebwin.c'... Done. c:\programma.o:programma.c:(.data+0x15a8): undefined reference to `HB_FUN_HBPRINTER' что же делать? как же быть?

gfilatov: Dimka пишет: при попытке откомпилировать на официальном HMG Официальная версия HMG поддерживает только MiniPrint, который является часть ядра этой библиотеки. Dimka пишет: что же делать? Либо переписывать библиотеку HbPrinter (ее второе название - WinPrint) под оф.версию, либо портировать команды HbPrinter в эквивалентный код на MiniPrint

Dimka: Проект большой, больше 100 000 строчек и компиляция на Расширенной версии занимает 30 минут, на официальной - 10, но не проходит линковка из-за вышеописанной ошибки. Собственно, из-за этой разницы и хочется заставить работать программу на официальной версии. Возможно ли как-то уменьшить время компиляции расширенной версии? И как проще заставить компилироваться программу под оф. версией, не меняя код самой программы?


gfilatov: Dimka пишет: Возможно ли как-то уменьшить время компиляции расширенной версии? Конечно! Для этого надо просто собирать Ваш проект с помощью утилиты minigui\Utils\MPM, создав в ней новый проект .HPJ и подключив в него все свои модули, формы и ресурсы. Именно так я собираю файл Ide.exe, исходники которого тоже не маленькие

Dimka: Спасибо! Пробую. За счет чего уменьшается время компиляции? UPD. Прочитал ридми. Так и знал, что компилирует только измененные файлы))) Как теперь уменьшить размер ехешника? Ведь компилятор все, что есть в хмг в него пихает(ибо даже простенький хелловорлд занимает 1.5 мб) ? 105 000 строчек - 3.6 мб

gfilatov: Dimka пишет: За счет чего уменьшается время компиляции? За счет того, что эта утилита позволяет компилировать только изменившиеся/новые модули/формы.

Dimka: "обычным" способом все компилируется. добавил все prg-файлы программы. ни форм, ни ресурсов не используется. выделил файл с функцией Main, include-ами minigui.ch, winprint и моими файлами, как главный. настройки дефолтные. нажал Build. ехе-шника не вышло. вылезло много прежупреждений. ... C:\TT\ASEBWIN.PRG(37) Warning W0002 Ambiguous reference, assuming memvar: 'PTTRS' C:\TT\ASEBWIN.PRG(38) Warning W0002 Ambiguous reference, assuming memvar: 'PTRAB' C:\TT\ASEBWIN.PRG(39) Warning W0002 Ambiguous reference, assuming memvar: 'PTRAB2' ... ... C:\TT\VIPPROD.PRG(8180) Warning W0001 Ambiguous reference: 'ISIZE2' C:\TT\VIPPROD.PRG(8180) Warning W0001 Ambiguous reference: 'GLCOLB' C:\TT\VIPPROD.PRG(8225) Warning W0001 Ambiguous reference: 'PTOPI' C:\TT\VIPPROD.PRG(8240) Warning W0001 Ambiguous reference: 'STO27' C:\TT\VIPPROD.PRG(8244) Warning W0001 Ambiguous reference: 'RPO' C:\TT\VIPPROD.PRG(8245) Warning W0001 Ambiguous reference: 'A7' ... No code generated. строки представляют из себя ничем не примечательные присваивания. как исправить? пробую Compiler warnings = None))))

gfilatov: Dimka пишет: как исправить? Объявить используемые переменные до присвоения им значений как Local, Static или Private, Public

Dimka: другие ошибки появляются. не пойму эту систему. через компил.бат компилируется и работает. через иде не компилируется выдает одни ошибки, через мпм -другие. ппц.

gfilatov: Dimka пишет: через иде не компилируется выдает одни ошибки, через мпм -другие Это еще раз показывает, что без изучения базовых понятий библиотеки эту проблему не решить Dimka пишет: через компил.бат компилируется и работает А Вы попробуйте команду compile.bat <имя проекта> /e и тогда увидите сообщение об шибках в файле <имя проекта>.err

Dimka: почитал мануал. директива include - просто вставляет текст одной подпрограммы в другую. все-таки заставил мпм компилировать программу. решил проверить, что будет если главный прг чуть-чуть поменять. программа полностью перекомпилируется. в MPM: выбран файл asebwin.prg, остальные в другой вкладке - зависимые. в asebwin.prg: в начале файла: #include "minigui.ch" #include "winprint.ch" .... .... в конце файла: #include "blablabla.prg" /* свои модули */ .... #include "blabla.prg" что же делать? как же быть?

gfilatov: Dimka пишет: что же делать? MPM предполагает, что в таком виде в конце файла: #include "blablabla.prg" /* свои модули */ .... #include "blabla.prg" директива #include не используется. Все модули независимо друг от друга перечисляются в первой вкладке, а затем основной модуль (asebwin.prg) помечается как главный (main). При такой организации сборки, как у Вас, большого ускорения компиляции не будет, поскольку основной модуль будет перекомпилирован всегда.

Dimka: 1. нет "нормальных" модулей? которые относительно независимы, имеют свои пространства имен. 2. так я и не понял что же делать((( дайте совет. 3. основной модуль - 3% от всей программы. так что это не страшно. gfilatov пишет: MPM предполагает, что в таком виде цитата: в конце файла: #include "blablabla.prg" /* свои модули */ .... #include "blabla.prg" директива #include не используется. не понял. можно подробнее?

gfilatov: Dimka пишет: в MPM: выбран файл asebwin.prg, остальные в другой вкладке - зависимые. Если такой вариант устраивает, то - нет проблем Dimka пишет: нет "нормальных" модулей Если все модули подключены к основному с помощью директивы #include, то получается один основной модуль, а это исключает возможность ускорить перекомпиляцию за счет компиляции только изменившихся модулей.

Dimka: из вышесказанного вытекает нижеследующее? мне надо удалить из основного модуля директивы include, а в мпм выбрать файл asebwin.prg(основной модуль), остальные в другой вкладке - зависимые. так?)

Dimka: фуххх... справился. теперь компиляция занимает 20 секунд вместо получаса. а всего-то требовалось посмотреть пример в папке SAMPLE))))) ну и еще удалить из главного модуля include с второстепенными модулями, а в них добавить include minigui.ch, winprint.ch и declare-ировать окна, которые определяются не в этом prg-файле. в общем, сделать все по аналогии с примером.

Петр: Dimka пишет: фуххх... справился. И стоило из-за каких-то 29 минут 40 секунд так париться ?



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