Автор | Сообщение |
|
| постоянный участник
|
Пост 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: 26
Зарегистрирован: 25.12.07
|
|
Отправлено: 05.01.08 20:34. Заголовок: Петр пишет: Куда Вы..
Петр пишет: цитата: | Куда Вы дописали harbour-b32.lib? |
| В 2.bat-файл. Эта фраза была Павлу. Я просто действительно не знал как скомпилировать проект с использованием harbour-b32.dll. Но после сам "догадался дописать": bcc32 -O2 -d........2.c FastRepH.c harbour-b32.lib... Петр пишет: цитата: | Если Вас не затруднит, что Вы подразумеваете под "harbour-b32.lib-С-API подможество"? |
| Очень просто, это набор функций, который экспортируется harbour-b32.dll. Например, я начал дебажить ошибки и увидел "Access violation" на вызове hb_stackPopReturn. Поиск этой функции в harbour-b32.lib/dll результата не дал. В результате меняю эту функцию на аналогичную hb_xvmRetValuе, но убедившись, что она "присутствует" в harbour-b32.lib. Работает. То есть, похоже при использование harbour-b32.dll смешанный вызов функций и из harbour-b32.dll и из exe приводит к "чехарде" в стеке. Значит для универсальности мне нужно при harbour-b32.dll использовать только ее. При монолитном exe это все неважно. Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 342
Зарегистрирован: 09.10.06
|
|
Отправлено: 06.01.08 00:57. Заголовок: Сергей, Pasha пишет..
Сергей, Pasha пишет: цитата: | Запустил тест в связке Harbour+bcc, собранный с harbour-b32.dll Приложение запустилось, но при нажатии на кнопку Open выдается сообщение Could not convert variant of type (Null) into type (String) |
| Вы написали: цитата: | Догадался "дописать" harbour-b32.lib (все-таки delphi-c здесь в идеологии сильно расходятся). У меня, правда, ошибки другие |
| Потом я привел скрипт, в результате которого все происходит, как написал выше Паша "Приложение запустилось, но при нажатии на кнопку Open выдается сообщение Could not convert variant of type (Null) into type (String)". Какие были другие ошибки и откуда это сообщение Could not convert variant of type (Null) into type (String), я так понимаю - это работа testlib.dll? Теперь о подмножествах, разработчикам рекомендуется использовать функции обьявленные как extern HB_EXPORT. Работать со стеком напрямую или использовать функции "для внутреннего употребления" нельзя, т.е. можно, но никто не будет выслушивать претензии после очередного изменения структуры стека, например после ожидаемого введения поддержки "strong type" переменных или MT. Для коммерческого продукта такая ситуация недопустима.
|
|
|
|
| постоянный участник
|
Пост N: 27
Зарегистрирован: 25.12.07
|
|
Отправлено: 06.01.08 01:22. Заголовок: Петр пишет: Какие б..
Петр пишет: цитата: | Какие были другие ошибки и откуда это сообщение Could not convert variant of type (Null) into type (String), я так понимаю - это работа testlib.dll? |
| Ok. Сейчас вышлю новый "рабочий вариант". А ошибка "Could not conver" конечно чисто дельфишная, но у меня действительно были "Access violation" и с моим и с Вашим вариантами bat-ника, что странно, но разберемся Петр пишет: цитата: | Теперь о подмножествах, разработчикам рекомендуется использовать функции обьявленные как extern HB_EXPORT. |
| Супер! Спасибо, вот это действительно для меня ценная информация. Даже проверил сейчас, описываемый мною предыдущий пример: extern void hb_stackPopReturn( void ); extern HB_EXPORT void hb_xvmRetValue( void ); То есть, вот он действующий ориентир. Еще раз спасибо :) Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 28
Зарегистрирован: 25.12.07
|
|
Отправлено: 06.01.08 16:06. Заголовок: Здравствуйте. Подс..
Здравствуйте. Подскажите, откуда и как брать "ультрасвежий" Харбор. Оказалось, что уже используется beta4 = 1.0.0, но не могу ее найти. Что такое SVN и т.д.? И про возможные "непонятки" при компиляции исходников, если они есть. Спасибо. Спирин Сергей.
|
|
|
|
| Администратор
|
Пост N: 692
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.01.08 17:55. Заголовок: xHarbour можно выкач..
xHarbour можно выкачать с помощью CVS-клиента по адресу: :pserver:anonymous@xharbour.cvs.sourceforge.net:/cvsroot/xharbour protocol :pserver user name: anonymous module: xharbour Бесплатный клиент под windows: http://www.tortoisecvs.org Harbour: с помощью SVN-клиента, URL: https://harbour-project.svn.sourceforge.net/svnroot/harbour-project/trunk Бесплатный клиент под windows: http://tortoisesvn.net Для сборки понадобится bison, версии 2.1 Еще пару недель назад я собирал с помощью старенького bison 1.28, но теперь он не поддерживается Ссылка http://puzzle.dl.sourceforge.net/sourceforge/gnuwin32/bison-2.1.exe Еще понадобится файл bison.simple Его можно взять на www.harbour_project.org или на www.xharbour.org
|
|
|
|
| постоянный участник
|
Пост N: 29
Зарегистрирован: 25.12.07
|
|
Отправлено: 06.01.08 18:00. Заголовок: Pasha пишет: Беспла..
Pasha пишет: Вроде я уже и сам все это нашел, но вот этот клиент упрямо у меня требует пароля Хотя вроде не должен.
|
|
|
|
| постоянный участник
|
Пост N: 344
Зарегистрирован: 09.10.06
|
|
Отправлено: 06.01.08 20:23. Заголовок: Небольшое уточнение ..
Небольшое уточнение - для Harbour URL: https://harbour-project.svn.sourceforge.net/svnroot/harbour-project/trunk/harbour
|
|
|
|
| Администратор
|
Пост N: 693
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.08 11:44. Заголовок: У кого установлен MS..
У кого установлен MS Visual Studio, просьба. Можно бросить в меня nmake.exe из этого пакета ? Адрес есть в этой теме. С dll, если есть такие, которые нужны для его работы Нужен для сборки xHarbour. У меня есть какой-то nmake 1.5, но это уж больно старая версия. Не понимает синтаксис makefile.vc
|
|
|
|
| постоянный участник
|
Пост N: 345
Зарегистрирован: 09.10.06
|
|
Отправлено: 07.01.08 12:06. Заголовок: От VS2003 подойдет?..
От VS2003 подойдет?
|
|
|
|
| Администратор
|
Пост N: 694
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.08 14:23. Заголовок: Думаю да Как раз too..
Думаю да Как раз tooklit 2003-года выпуска Не распознаюся команды вида: .c.obj:: То есть подряд 2 даоеточия
|
|
|
|
| Администратор
|
Пост N: 695
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.08 16:00. Заголовок: Спасибо, получил, ра..
Спасибо, получил, работает Петр, если можно, пришлите еще lib.exe. Года 3 назад я собирал xHb под MS VC toolkit, но с тех пор так далеко запрятал эти утилиты (nmake, lib), что и сам не найду SDK у меня есть
|
|
|
|
|
| Администратор
|
Пост N: 696
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.01.08 22:41. Заголовок: xHarbour + ms vc - o..
xHarbour + ms vc - ok Только у компилятотра msvc более строгий контроль типов, поэтому надо поправить: HB_FUNC( PRLOAD ) { FrLib = LoadLibrary("Testlib.dll"); DllF = (DllFunc)GetProcAddress((HMODULE) FrLib , (LPCSTR) "CallBack" ); InitEng = (InitEngFunc)GetProcAddress((HMODULE) FrLib , (LPCSTR) "InitEngine"); } HB_FUNC( PRUNLOAD ) { FreeLibrary((HMODULE) FrLib); } Иначе выдается ошибка. И для остальных вызовов winapi типы должны строго соотвествовать обьявленным
|
|
|
|
| постоянный участник
|
Пост N: 30
Зарегистрирован: 25.12.07
|
|
Отправлено: 08.01.08 01:05. Заголовок: Pasha пишет: xHarbo..
Pasha пишет: цитата: | xHarbour + ms vc - ok Только у компилятотра msvc более строгий контроль типов, поэтому надо поправить: |
| Ok. Спасибо. Буду иметь в виду. Еще вот такая проблемка. Доступ к переменным (memvars) я организовал через hb_memvarGetValue/hb_memvarSetValue, но они как Вы можете убедиться не HB_EXPORT. Что-то, ломаю голову и не могу понять как без них сделать мне функции GetValue/SetValue для переменных? Спирин Сергей.
|
|
|
|
| постоянный участник
|
Пост N: 386
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.01.08 12:21. Заголовок: Работаю только на xH..
Работаю только на xHarbour'e исключительно из-за совместимости (почти 100%) с Clipper'om ! Использую терминалку gtwin и gtwvt ! Собрал проект hbmake 2.bc -e При сборке под xHarbour Compiler build 0.99.70 (SimpLex) выдает: Error E2451 FASTREPH.PRG 92: Undefined symbol 'hb_stackPopReturn' in function HB_FUN_INITENGINE Что делать ?
|
|
|
|
| постоянный участник
|
Пост N: 31
Зарегистрирован: 25.12.07
|
|
Отправлено: 08.01.08 13:15. Заголовок: Andrey пишет: Error..
Andrey пишет: цитата: | Error E2451 FASTREPH.PRG 92: Undefined symbol 'hb_stackPopReturn' in function HB_FUN_INITENGINE Что делать ? |
| Несколько странно, так как hb_stackPopReturn объявлена в hbstack.h. Но в любом случае, hb_stackPopReturn я уже "выбросил" так как она не HB_EXPORT. Сейчас вышлю посвежее вариант.
|
|
|
|
| постоянный участник
|
Пост N: 346
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.01.08 14:37. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | Что-то, ломаю голову и не могу понять как без них сделать мне функции GetValue/SetValue для переменных? |
| Это можно сделать так, как душе угодно :) Разнообразное API не только помогает, но иногда сбивает с толку. Пример PROCEDURE main() PRIVATE mvp := "123" ? mvp ? __mvget( "mvp" ) ? my__mvget( "mvp" ) ? ? __mvput( "mvp", "456" ) ? ? mvp ? __mvget( "mvp" ) ? my__mvget( "mvp" ) ? ?my__mvput( "mvp", "123" ) ? ? mvp ? __mvget( "mvp" ) ? my__mvget( "mvp" ) ? RETURN #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" #include "hbvm.h" #include "hbstack.h" static PHB_DYNS pDynsGet = 0; static PHB_DYNS pDynsPut = 0; HB_FUNC( MY__MVGET ) { if ( ! pDynsGet ) pDynsGet = hb_dynsymFindName( "__MVGET" ); if ( pDynsGet && hb_dynsymIsFunction(pDynsGet) ) { PHB_ITEM itm; hb_vmPushDynSym( pDynsGet ); hb_vmPushNil(); hb_vmPushString( hb_parc(1), hb_parclen(1) ); hb_vmDo( 1 ); itm = hb_itemClone( hb_param( -1, HB_IT_ANY) ); #ifdef __XHARBOUR__ hb_itemReturn( itm ); hb_itemRelease( itm ); #else hb_itemReturnRelease( itm ); #endif } } HB_FUNC( MY__MVPUT ) { PHB_ITEM xNewValue = hb_param( 2, HB_IT_ANY ); if ( ! pDynsPut ) pDynsPut = hb_dynsymFindName( "__MVPUT" ); if ( pDynsPut && hb_dynsymIsFunction(pDynsPut) ) { PHB_ITEM itm; hb_vmPushDynSym( pDynsPut ); hb_vmPushNil(); hb_vmPushString( hb_parc(1), hb_parclen(1) ); hb_vmPush( xNewValue ); hb_vmDo( 2 ); itm = hb_itemClone( hb_param( -1, HB_IT_ANY) ); hb_itemReturnRelease( itm ); } } #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 387
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.01.08 20:01. Заголовок: Опять не собирается ..
Опять не собирается под хХарбором xHarbour Compiler build 0.99.70 (SimpLex) Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/ Compiling 'FASTREPH.PRG'... Lines 182, Functions/Procedures 2 Generating C source output to 'obj\FASTREPH.c'... Done. Building object module for 'obj\FASTREPH.c' using C compiler 'BCC32' as defined in 'Z:\xHARBOUR\BIN\harbour.cfg'... Exec: BCC32 -c -D__EXPORT__ -IZ:\xHARBOUR\include -d -LZ:\xHARBOUR\lib -oobj\FASTREPH.obj obj\FASTREPH.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland obj\FASTREPH.c: Error E2451 FASTREPH.PRG 62: Undefined symbol 'hb_itemPutSymbol' in function HB_FUN_INITENGINE *** 1 errors in Compile ***
|
|
|
|
| постоянный участник
|
Пост N: 32
Зарегистрирован: 25.12.07
|
|
Отправлено: 08.01.08 20:18. Заголовок: Andrey пишет: Опять..
Andrey пишет: цитата: | Опять не собирается под хХарбором |
| Вообще, если Вы были внимательны, то уже несколько человек сообщили что под xHarbour все собирается, поэтому думаю, что проблема какая-то у Вас, с путями, lib, и т.п.... 'hb_itemPutSymbol' объявлена в hbapiitm.h и она - HB_EXPORT.
|
|
|
|
| постоянный участник
|
Пост N: 33
Зарегистрирован: 25.12.07
|
|
Отправлено: 08.01.08 23:19. Заголовок: Петр пишет: Это мож..
Петр пишет: цитата: | Это можно сделать так, как душе угодно :) Разнообразное API не только помогает, но иногда сбивает с толку. Пример.... |
| А какие еще есть варианты ;-) За вариант, спасибо, если ничего другого не "придумается", то буду использовать. Но, просто, доступ к переменным через выполнения функций prg-уровня, как то не кажется самым оптимальным решением :) Кстати, заглянул в реализацию __mvget/__mvset и даже улыбнулся увидев: hb_memvarGetValue/hb_memvarSetValue, то есь то, что сейчас менять и приходится.
|
|
|
|
| постоянный участник
|
Пост N: 349
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.01.08 23:40. Заголовок: Сергей, это самое оп..
Сергей, это самое оптимальное и безопасное решение -__MVPUT и __MVGET, публичные функции, описанные в справочной документации, и в этом случае Вам все равно, как они устроены, лишь бы результат правильный возвращали. Все остальные функции тоже из официального API. Да, возможно изящностью такое решение сильно не отличается, да и быстродействием - но Вам этого и не нужно, Вам нужен надежный код который бы работал вне зависимости от смены версий. К тому же легко написать функцию prg-уровня, которая возвращает результат макрокомпиляции и вообще под что угодно. Я Вам уже писал, что Harbour ожидают серьезные нововведения, в часности поддержка MT, к примеру * harbour/include/hbstack.h * harbour/source/vm/estack.c * harbour/source/vm/hvm.c + added support for thread specific data located on HVM stack Now it's possible to allocate static variables which are local to thread. Such variables are allocated on HVM stack and automatically destroyed. To declare new TSD variable use: HB_TSD_NEW( <name>, <size>, <init>, <destruct> ) <name> - name of variable which holds TSD handler и все, что из этого следует. Так что решать Вам. можете хоть с HB_API_INTERNAL экспериментировать и работать напрямую со стеком и таблицей символов без всяких функций. Не, ну конечно hb_itemClone на hb_itemCopy поменять можно
|
|
|
Ответов - 201
, стр:
1
2
3
4
5
6
7
8
9
10
11
All
[только новые]
|
|