Автор | Сообщение |
|
| постоянный участник
|
Пост 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 не знал (слышал краем уха только), то хочется и услышать советы по поводу "с чего начать, на что обратить внимание", да и вообще советы по поводу "а стоит ли заморачиваться, есть ли здесь рынок и т.д." Спасибо. Спирин Сергей.
|
|
|
Ответов - 201
, стр:
1
2
3
4
5
6
7
8
9
10
11
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 34
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 00:11. Заголовок: Петр пишет: Сергей,..
Петр пишет: цитата: | Сергей, это самое оптимальное и безопасное решение -__MVPUT и __MVGET... |
| Ок. Убедили. Петр пишет: цитата: | Так что решать Вам. можете хоть с HB_API_INTERNAL экспериментировать и работать напрямую со стеком и таблицей символов без всяких функций. |
| Нет-нет. У меня нет особенного желания сделать все на "сверхнизком" уж уровне. Просто я поначалу для FastReport (script) начал делать все по аналогии реализации prg-уровня. :)) А выяснилось, что надо чуть повыше взять, поэтому сейчас в стадии "перестройки мышления". Спасибо.
|
|
|
|
| постоянный участник
|
Пост N: 388
Зарегистрирован: 12.09.06
|
|
Отправлено: 09.01.08 12:24. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Вообще, если Вы были внимательны, |
| Вы знаете, вообще то я на эти вещи обращаю внимание, и считаю некорректно так обращаться. Вы попросили помощи в тестировании продукта, что я честно стараюсь делать. Sergey Spirin пишет: цитата: | то уже несколько человек сообщили что под xHarbour все собирается, поэтому думаю, что проблема какая-то у Вас, с путями, lib, и т.п.... |
| Нет с ними никаких проблем, все правильно !!! У других могут быть отличия, я собираю на дистрибутиве скачаном с сайта, без дополнительных библиотек. Причина выявлена из вашего нижеперечисленного комментария. Sergey Spirin пишет: цитата: | 'hb_itemPutSymbol' объявлена в hbapiitm.h и она - HB_EXPORT. |
| Оказывается hb_itemPutSymbol не перечислена в hbapiitm.h входящем в xHarbour Compiler build 0.99.70 и xHarbour Compiler build 1.0.0 а в MiniGUI есть !!! Так что ваши действия по совместимости, господин Спирин !
|
|
|
|
| постоянный участник
|
Пост N: 35
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 12:39. Заголовок: Andrey пишет: Вы зн..
Andrey пишет: цитата: | Вы знаете, вообще то я на эти вещи обращаю внимание, и считаю некорректно так обращаться. |
| Извините, совсем не хотел Вас как-то задеть. Для меня, наверное, такая сверхмножественная вариативность возможной сборки очень непривычна. Еще раз простите. Andrey пишет: цитата: | Оказывается hb_itemPutSymbol не перечислена в hbapiitm.h входящем в xHarbour Compiler build 0.99.70 и xHarbour Compiler build 1.0.0 а в MiniGUI есть !!! Так что ваши действия по совместимости, господин Спирин ! |
| Ok. Уже, "выкидываем" hb_itemPutSymbol. Тем более, я посмотрел уже дельфийский код, я ее не использую, по инерции осталась в передаче точки входа. Через часик, с Вашего разрешения, пришлю посвежее версию. Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 36
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 15:33. Заголовок: Петр пишет: Сергей,..
Петр пишет: цитата: | Сергей, это самое оптимальное и безопасное решение -__MVPUT и __MVGET |
| А нет ли аналогичной универсальной функции, которая вернет макрос от строки? Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 351
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.08 16:14. Заголовок: Нет, по крайней мере..
Нет, по крайней мере - я не знаю. Зато можно создать свою сборку Harbour с запретом вызова макрокомпилятора Здесь прийдется писать UDF.
|
|
|
|
| постоянный участник
|
Пост N: 37
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 16:44. Заголовок: Петр пишет: Нет, по..
Петр пишет: цитата: | Нет, по крайней мере - я не знаю. |
| Ситуация у меня сейчас такая. Остались всего три функции, которые я использую и которые не HB_EXPORT. Это: hb_macroCompile, hb_macroRun, hb_macroDelete То есть, работа с макросами. При этом эти функции "прекрасно" работают у меня как в монолитном exe, так и с harbour.dll. То есть, проблемы с harbour.dll этих функций не касались. У меня такое ощущение, что я могу их оставить. Как думаете? Кстати, написал на уровне следующее: FUNCTION __MacroCall( cString ) RETURN &(cString) И стал вызывать как обычно через hb_vmDo.... и в варианте с harbour.dll проблемы появились (!!!). Стала появляться нестабильная ошибка "No exported method EVAL" ??? Опять таки количество употреблений hb_macroCompile, hb_macroRun, hb_macroDelete по кодам высокое.... Хочется мне их оставить, что скажете?
|
|
|
|
| постоянный участник
|
Пост N: 352
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.08 17:28. Заголовок: Я думаю, что большой..
Я думаю, что большой проблемы не будет Если подключать RDD, т.е.работать с базами данных - эти функции обязательно используются.
|
|
|
|
| постоянный участник
|
Пост N: 353
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.08 17:38. Заголовок: Но попробуйте еще за..
Но попробуйте еще заменить вызов vmDo(1) на vmFunction(1) и потестировать.
|
|
|
|
| постоянный участник
|
Пост N: 38
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 20:16. Заголовок: Что-то не нашел функ..
Что-то не нашел функцию DbRefresh(). Какой аналог используется обычно в Харборе?
|
|
|
|
| постоянный участник
|
Пост N: 354
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.08 20:38. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | то-то не нашел функцию DbRefresh() |
| А что она делает?
|
|
|
|
| постоянный участник
|
Пост N: 39
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 20:47. Заголовок: Петр пишет: А что о..
Петр пишет: Сбрасывает локальный клиентский кэш рабочей области и перечитывает его из реальных данных. Например, например, кто-то по сети поменял запись, у другого "висит" старая версия на экране. После DbRefresh() должна "приехать" новая.
|
|
|
|
|
| постоянный участник
|
Пост N: 355
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.01.08 20:54. Заголовок: DbSkip(0) flushes an..
DbSkip(0) flushes and refreshes the internal database buffers. All changes made to the record become visible without moving the record pointer in either direction.
|
|
|
|
| постоянный участник
|
Пост N: 40
Зарегистрирован: 25.12.07
|
|
Отправлено: 09.01.08 23:24. Заголовок: Петр пишет: DbSkip(..
Петр пишет: цитата: | DbSkip(0) flushes and refreshes... |
| Ok. Спасибо.
|
|
|
|
| постоянный участник
|
Пост N: 41
Зарегистрирован: 25.12.07
|
|
Отправлено: 10.01.08 12:28. Заголовок: Здравствуйте, Выс..
Здравствуйте, Выслал окончательный (надеюсь :)) вариант теста. Но что-то у меня сегодня почта "подглючмвает", поэтому, если кто-то не получил, напишите пожалуйста. Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 42
Зарегистрирован: 25.12.07
|
|
Отправлено: 10.01.08 16:42. Заголовок: Здравствуйте, еще ра..
Здравствуйте, еще раз. Начинаю "прощупывать" реализацию класса менеджера отчетов. Отсюда следующие вопросы. - Похоже синтаксис классов/объектов у Харбура и Аляски несколько различаются. В связи с этим не подскажите где что посмотреть, какие-то примеры и т.д. - Есть ли типовые средства загрузки "сторонних" dll в Харборе? Везде, что не найду, речь о "Харбор"-dll-ях. Или сторонние принято грузить с помощью С? В той же Аляске есть DllLoad(), DllCall(). Иди я просто не вижу? Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 356
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.01.08 17:19. Заголовок: Судя по тому, что кн..
Судя по тому, что кнопка Open блокируется - проблемы с memory leak остаются? Я не буду говорить о том, что синтаксис классов у Harbour и xHarbour различаются, достаточно сказать, что в самом Harbour доступно несколько "стилей" ООП , при этом их вполне можно смешивать. Как пример для "подражания" я рекомендую посмотреть реализацию класса TXMLNode из библиотеки xhb (harbour\contrib), особенно обратить внимание на взаимодействие с C level. Типовых средств загрузки "сторонних" dll в Harbour нет - Harbour кросплатформенное средство, а работа с so в Linux отличается от работы с dll Windows или OS\2. Условно - xHarbour больше ориентирован на Win, он включает в себя функции для работы с "сторонними" dll. Если ищете универсальное решение - я советую обратить внимание на исходники библиотек Dll and CallDll из состава MiniGUI Ex, тут на форуме недавно о них вспоминали..
|
|
|
|
| постоянный участник
|
Пост N: 43
Зарегистрирован: 25.12.07
|
|
Отправлено: 10.01.08 17:57. Заголовок: Петр пишет: Судя по..
Петр пишет: цитата: | Судя по тому, что кнопка Open блокируется - проблемы с memory leak остаются? |
| Нет-нет, это скорее моя лень, а не какая-то проблема Просто "правильно" писать было длиннее. Объекты корректно повторное открытие игнорируют. Просто у меня на кнопке еще "руками" Мастер-Детэйл устанавливается (создается item с блоком кода), это нужно под условие "загонять", кнопку же задизэйблить быстрей :)) Так что, никаких проблем с "memory leak" нет. Эта форма - "вещь" тоже временная, поэтому я пока не "упираюсь". За рекомендации спасибо, буду вникать.
|
|
|
|
| модератор
|
Пост N: 682
Зарегистрирован: 25.05.05
|
|
Отправлено: 10.01.08 18:09. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Есть ли типовые средства загрузки "сторонних" dll в Харборе? |
| Следующий код реализует обращение к системной библиотеке uxtheme.dll в коде библиотеки MiniGUI Ext: static HINSTANCE hUxTheme; long InitUxTheme( void ) { if( hUxTheme == NULL ) { hUxTheme = LoadLibraryEx( "uxtheme.dll", NULL, NULL ); } return( LONG ) hUxTheme; } void EndUxTheme( void ) { if( !hUxTheme == NULL ) { FreeLibrary( hUxTheme ); hUxTheme = NULL; } } HB_FUNC( ISTHEMEACTIVE ) { BOOL bRet = ( BOOL ) FALSE; if( hUxTheme == NULL ) { hUxTheme = LoadLibraryEx( "uxtheme.dll", NULL, NULL ); } if( hUxTheme ) { fnIsThemeActive pfn = ( fnIsThemeActive ) GetProcAddress( hUxTheme, "IsThemeActive" ); if( pfn ) { bRet = ( BOOL ) pfn(); } } hb_retl( bRet ); } HB_FUNC( ISAPPTHEMED ) { BOOL bRet = ( BOOL ) FALSE; if( hUxTheme == NULL ) { hUxTheme = LoadLibraryEx( "uxtheme.dll", NULL, NULL ); } if( hUxTheme ) { fnIsAppThemed pfn = ( fnIsAppThemed ) GetProcAddress( hUxTheme, "IsAppThemed" ); if( pfn ) { bRet = ( BOOL ) pfn(); } } hb_retl( bRet ); }
|
|
|
|
| постоянный участник
|
Пост N: 44
Зарегистрирован: 25.12.07
|
|
Отправлено: 10.01.08 18:46. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Следующий код реализует обращение к системной |
| Спасибо. Тo есть, фактически принято загружать на "чистом" С. Ок.
|
|
|
|
| постоянный участник
|
Пост N: 358
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.01.08 19:02. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Тo есть, фактически принято загружать на "чистом" С. Ок. |
| И да, и нет В том же MiniGUI можно найти такие конструкции: DECLARE DLL_TYPE_LONG DIWriteJpg(DLL_TYPE_LPCSTR DestPath, DLL_TYPE_LONG quality, DLL_TYPE_LONG progressive) ; IN DIJPG.DLL ALIAS BMPTOJPG BmpToJpg( path, 100, 1 ) Такие (похожие) конструкции "любят" применять и пользователи FiveWin, What32, xHb. Вообще то не обязательно знать С, чтобы использовать [x]Harbour. Но Вам, чтобы не вникать в нюансы реализации, действительно лучше написать загрузку dll на C или Паскале
|
|
|
Ответов - 201
, стр:
1
2
3
4
5
6
7
8
9
10
11
All
[только новые]
|
|