On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 1
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 25.12.07 17:41. Заголовок: C чего начать? Есть ли С-API? И т. д.


Здравствуйте.

Хотелось бы услышать советы и рекомендации, во-первых, "откуда качать, что ставить и т.п.". И второе, это информация по С-API.

Объясню свою ситуацию. Я не клипперист (дельфист), однако, получилось, что плотно познакомился с Clipper и Alaska Xbase++. Для Alaska Xbase написал дельфи-оболочку над С-API и полностью портировал FastReport (генератор отчетов) для этого языка, продукт продается и т.д (см. http://www.hotsoft.ru/ALASKA/frax_eng.htm).

Но вот стал получать много писем из Испании Призывают тоже самое сделать для Harbour/xHarbour/FiveWin и т. д..

Так как ничего до этого про Harbour не знал (слышал краем уха только), то хочется и услышать советы по поводу "с чего начать, на что обратить внимание", да и вообще советы по поводу "а стоит ли заморачиваться, есть ли здесь рынок и т.д."

Спасибо.

Спирин Сергей.


Спасибо: 0 
Профиль
Ответов - 201 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]


постоянный участник


Пост N: 54
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 12:56. Заголовок: Pasha пишет: Харбор..


Pasha пишет:

 цитата:
Харбор (оба) содержит терминал gtwvt/gtwvg, который включает в себя основные контролы windows в качестве надстройки над текстовым режимом. Если использовать его, то можно сделать демку и без минигуи, используя базовую поставку.
Демо графических примитивов gtwvt
xharbour\contrib\wvtgui\samples
harbour\contrib\hbgtwvg\tests
Мне кажется, этих средств будет вполне достаточно для рисования главного окошка демки



Что-то у себя в харборе нашел gtwvt.lib, но не нашел никаких примеров использования.


Спасибо: 0 
Профиль
постоянный участник


Пост N: 363
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 13:37. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
Что-то не пойму, чем INLINE лучше? Код прямо в объявлении класса? Это быстрее работает?



Да - это работает быстрее
К тому же, если помните, я на примере fnDBStruct() показал Вам как нужно писать быстрый код, поверьте на слово - разница в скорости довольно ощутимая.


 цитата:
Точное сравнение поставлю "==", но тоже хочется узнать, чем оно лучше?



"=" может использоваться и как оператор сравнения и как оператор присваивания, в зависимости от контекста применения. В связи с чем иногда делаются ненужные ошибки.


 цитата:

Здесь есть нюансы. Нюансы с многопоточностью. Например по аляске. Сейчас FRAX не полностью ее поддерживает. Но есть обходной путь, которым некоторые алясковцы пользуются. Накопировать несколько dll-ей. И создать несколько объектов "от" разных dll.



Сейчас не только FRAX ее не поддерживает, но и [х]Harbour - поэтому не надо усложнять себе жизнь. Но это на Ваше усмотрение.

















Спасибо: 0 
Профиль
постоянный участник


Пост N: 55
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 14:16. Заголовок: Петр пишет: Что-то ..


Петр пишет:

 цитата:
Что-то не пойму, чем INLINE лучше? Код прямо в объявлении класса? Это быстрее работает?

Да - это работает быстрее



Ok. Буду знать и использовать.

Петр пишет:

 цитата:
К тому же, если помните, я на примере fnDBStruct() показал Вам как нужно писать быстрый код, поверьте на слово - разница в скорости довольно ощутимая.



Ok. Там для меня несколько непонятный синтаксис, а fnDBStruct() не критичная по скорости функция, но тем не менее, хорошо, давайте, Вы будете присылать оптимизированные куски, а я их буду менять. Методы все короткие, не так много и оптимизировать.

Если можно, fnDBStruct() продублируйте на "мыло".

Петр пишет:

 цитата:
"=" может использоваться и как оператор сравнения и как оператор присваивания, в зависимости от контекста применения. В связи с чем иногда делаются ненужные ошибки.



Ok. Правило принимаю, при сравнениях буду писать ==.


Петр пишет:

 цитата:
Сейчас не только FRAX ее не поддерживает, но и [х]Harbour - поэтому не надо усложнять себе жизнь. Но это на Ваше усмотрение.



Да? [х]Harbour не поддерживает многопоточность? Хорошо, тогда действительно можно CLASSVAR.


Спирин Сергей.

Спасибо: 0 
Профиль
модератор




Пост N: 689
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 15.01.08 14:57. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
[х]Harbour не поддерживает многопоточность?


Что касается Харбора, то поддержка многопоточности планируется после выпуска версии 1.0.
Что касается хHarbour, то поддержка многопоточности в нем теоретически есть, но периодически пишут на его форуме, что практически она не работает

Спасибо: 0 
Профиль
постоянный участник


Пост N: 338
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.01.08 15:08. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
Точное сравнение поставлю "==", но тоже хочется узнать, чем оно лучше?



Для числовых данных точное сравнение и просто сравнение - это одно и тоже. Различие имеет место, когда сравниваются текстовые данные. В этом случае алгоритм сравнения разный.
Как было выше сказано, можно, якобы, перепутать сравнение и оператор присваивания. Но в Clipper (не знаю, как в [x]Harbour) оператор присваивания не может использоваться в выражениях. Там может использоваться только строчный оператор присваивания :=, то есть когда перед знаком равенства ставится двоеточие.
Привычка заменять знак = на два знака == восходит к языку C/C++, где сравнение всегда указывается в виде ==. В этом языке действительно можно по ошибке заменить == на = и получить совершенно другой результат.

Например

while ( x = 1 ) { x = 2; }

вместо

while ( x == 1 ){ x = 2; }

В первом случае цикл while будет выполняться бесконечно, так как в условии while x каждый раз будет получать значение, равное 1.

В Clipper такую ошибку допустить нельзя, так как в конструкции

DO WHILE ( x = 1 ) оператор = всегда рассматривается, как оператор сравнения.
Тем не менее так как Clipper и [x]Harbour, фактически написаны на C, то все по привычке пишут для оператора сравнения два знака равенства ==. Хотя надо осознанно к этому подходить для строковых данных, как я заметил выше.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 364
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 16:33. Заголовок: Григорьев Владимир п..


Григорьев Владимир пишет:

 цитата:
Как было выше сказано, можно, якобы, перепутать сравнение и оператор присваивания.



Когда приблизительно месяца два назад на форуме разработчиков обсуждали так называемую "дорожную карту" Harbour 2.x , то помимо всего того, что может привести в ужас добропорядочного клиппериста, предлагалось добавить ключ компилятора, при использовании которого = ставится фактически вне закона: для присваивания использовать исключительно :=, для сравнения ==.


Спасибо: 0 
Профиль
постоянный участник


Пост N: 56
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 16:44. Заголовок: Все-таки хотелось бы..


Все-таки хотелось бы определиться с демо, и с целесообразностью его типов.

-Делать ли консольную версию?

-Можно ли "извернуться" и сделать "полу-псевдо.."-windows приложение, которое будет компилироваться в обоих "голых" харбурах?

Спирин Сергей.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 57
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 16:50. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
METHOD SetTitle(cTitle) class frReportManager
RETURN Call_Func_C_I(::_SetTitle, cTitle) = 1

лучше обьявлять как
METHOD SetTitle INLINE ( Call_Func_C_I(::_SetTitle, cTitle) == 1 )



Что-то не пойму, а как сюда передать cTitle?

Спасибо: 0 
Профиль
модератор




Пост N: 690
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 15.01.08 17:02. Заголовок: Петр пишет: лучше о..


Петр пишет:

 цитата:
лучше обьявлять как
METHOD SetTitle INLINE ( Call_Func_C_I(::_SetTitle, cTitle) == 1 )


Опечатка Имелось ввиду, конечно:
METHOD SetTitle( cTitle) INLINE ( Call_Func_C_I(::_SetTitle, cTitle) == 1 )



Спасибо: 0 
Профиль
постоянный участник


Пост N: 365
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 17:07. Заголовок: Сергей, это зависит ..


Сергей, это зависит от Вас и от маркетинговой политики выбранной опять же Вами.

Консольную версию обязательно. А остальное, как мне видится, весьма желательно, т.е. пример для FiveWin, Visual xHarbour, HWGUI, MiniGUI, gtwvt&co. Затраты небольшие, а Вам только +.
Поскольку кому и примера не нужно, а кто без примера и шагу ступить не может.

К тому же не спрос рождает предложение, а предложение спрос.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 366
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 17:08. Заголовок: gfilatov пишет: Опе..


gfilatov пишет:

 цитата:
Опечатка



Угу

Спасибо: 0 
Профиль
модератор




Пост N: 691
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 15.01.08 17:11. Заголовок: gfilatov пишет: Дел..


gfilatov пишет:

 цитата:
Делать ли консольную версию?


Да.

Sergey Spirin пишет:

 цитата:
Можно ли "извернуться" и сделать "полу-псевдо.."-windows приложение


Возможно, поскольку библиотека GTWVT входит в стандартную поставку обоих Харборов
Но рекомендую также рассмотреть вопрос включения исходников полноценного Win-приложения, основанного на MiniGUI и аналогичного по функциональности демке для Alaska XBase++, ссылку на которую Вы дали в начале топика

Спасибо: 0 
Профиль
постоянный участник


Пост N: 339
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.01.08 17:24. Заголовок: Петр пишет: ключ ко..


Петр пишет:

 цитата:
ключ компилятора, при использовании которого = ставится фактически вне закона: для присваивания использовать исключительно :=, для сравнения ==.



Но на самом деле это некорректно! Так как вы тем самым перечеркиваете установку SET EXACT ON|OFF. Если вы всегда будете заменять = на ==, то эта установка будет бессмысленна, а многие программы, которые по незнанию, или случайно будут откомпиллированы с этим ключом перестанут работать!
Другое дело, что я согласен с тем, что лучше простой оператор присваивания = заменять на строчный оператор присваивания :=, что я сам лично всегда так и делаю. Но вот со знаком сравнения = этого делать нельзя. То есть следует различать знаки сравнения = и ==. Они имеют разную семантику и не являются взаимозаменяемыми.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 58
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 17:27. Заголовок: Кстати, забавно, в х..


Кстати, забавно, в хелпе Аляски про INLINE- It is generally recommended to always separate the method declaration from its implementation.

Мне тоже вот как-то психологически "перечит"....

gfilatov пишет:

 цитата:
Делать ли консольную версию?
Да.


gfilatov пишет:

 цитата:
Возможно, поскольку библиотека GTWVT входит в стандартную поставку обоих Харборов
Но рекомендую также рассмотреть вопрос включения исходников полноценного Win-приложения, основанного на MiniGUI



Ок. Давайте определяться кто что делает. Мне демы писать сильно не хочется, я не клипперист, у меня просто получится хуже. Для дем же уже все есть, коды вызовов можно копировать из алясочного, должно в большинстве своем работать и т.д.

Если неудобно на форуме, то давайте мылом.



Спасибо: 0 
Профиль
Администратор




Пост N: 707
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 15.01.08 17:37. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
Что-то у себя в харборе нашел gtwvt.lib, но не нашел никаких примеров использования.



Все эти примеры используют функции/классы из библиотеки wvtgui для xHarbour и
ее аналога в Harbour - hbgtwvg.lib. Это собственно надстройка над терминалом gtwvt. Эти библиотеки с примерами находятся в разделе contrib - его надо дополнительно выкачать


 цитата:
Можно ли "извернуться" и сделать "полу-псевдо.."-windows приложение, которое будет компилироваться в обоих "голых" харбурах?



С помощью этой библиотеки можно получить полноценное gui-окно - с меню, кнопками, тулбаром, btnbmp, radiobutton - чего душе угодно
Для демо думаю будет вполне достаточно

Спасибо: 0 
Профиль
постоянный участник


Пост N: 367
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 18:15. Заголовок: Григорьев Владимир п..


Григорьев Владимир пишет:

 цитата:
Но на самом деле это некорректно! Так как вы тем самым перечеркиваете установку SET EXACT ON|OFF. Если вы всегда будете заменять = на ==, то эта установка будет бессмысленна, а многие программы, которые по незнанию, или случайно будут откомпиллированы с этим ключом перестанут работать!
Другое дело, что я согласен с тем, что лучше простой оператор присваивания = заменять на строчный оператор присваивания :=, что я сам лично всегда так и делаю. Но вот со знаком сравнения = этого делать нельзя. То есть следует различать знаки сравнения = и ==. Они имеют разную семантику и не являются взаимозаменяемыми.



Я думаю, что это обращение относится не ко мне

Этот ключ не будет включен по умолчанию. И опасений, подобных высказанным Вами было также достаточно. К соглашению не пришли и решили вернуться к вопросу попозже. Если я найду в архиве высказанные предложения - я их опубликую здесь.

Лично я использую только := для присваивания, == для сравнения числовых данных ( вот почему и написал на автомате Call_Func_C_I(::_SetTitle, cTitle) == 1 ), = и == для работы со строками.

Спасибо: 0 
Профиль
постоянный участник


Пост N: 368
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 18:26. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
Кстати, забавно, в хелпе Аляски про INLINE- It is generally recommended to always separate the method declaration from its implementation.

Мне тоже вот как-то психологически "перечит"....



Личные симпатии-антипатии не в счет

Мне вот это тоже не нравится

HB_FUNC( FRLOAD )
{
hb_retnl((long)(HMODULE)LoadLibrary(hb_parc(1)));
}

HB_FUNC( GETFRPROCADDRESS )
{
hb_retnl((long)(FARPROC)GetProcAddress((HMODULE)hb_parnl(1) , hb_parc(2)));
}

HB_FUNC( FRUNLOAD )
{
FreeLibrary((HMODULE)hb_parnl(1));
}

но ведь работает !



 цитата:
Ок. Давайте определяться кто что делает. Для дем же уже все есть, коды вызовов можно копировать из алясочного, должно в большинстве своем работать и т.д.

Если неудобно на форуме, то давайте мылом.



Это в смысле портировать алясочный пример ?
И что должно быть неудобно на форуме ?



Спасибо: 0 
Профиль
постоянный участник


Пост N: 59
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 18:38. Заголовок: Петр пишет: Мне вот..


Петр пишет:

 цитата:
Мне вот это тоже не нравится

HB_FUNC( FRLOAD )
{
hb_retnl((long)(HMODULE)LoadLibrary
...................



А что, кстати, не нравится? HMODULE/FARPROC появились по "требованию Microsoft"

А к long приводить надо, чтоб в Харбур-переменной хранить...

Петр пишет:

 цитата:
Это в смысле портировать алясочный пример ?
И что должно быть неудобно на форуме ?



Форум больше для общение и обмена... Мне бы хотелось организовать более рабочий процесс




Спасибо: 0 
Профиль
постоянный участник


Пост N: 369
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 15.01.08 18:43. Заголовок: Sergey Spirin пишет:..


Sergey Spirin пишет:

 цитата:
А к long приводить надо, чтоб в Харбур-переменной хранить...



В Харбур-переменной с одинаковым успехом можна и указатели хранить..


Спасибо: 0 
Профиль
постоянный участник


Пост N: 60
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.01.08 18:49. Заголовок: Петр пишет: В Харбу..


Петр пишет:

 цитата:
В Харбур-переменной с одинаковым успехом можна и указатели хранить..



Да пробовал я hb_retptr в первую очередь, но уже не помню что, не срослось....В обратной "отдаче" что ли... не помню уже.

Спасибо: 0 
Профиль
Ответов - 201 , стр: 1 2 3 4 5 6 7 8 9 10 11 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 150
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет