On-line: Dr. Oldwarez, гостей 1. Всего: 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: 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 это все неважно.

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


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


Пост 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. Для коммерческого продукта такая ситуация недопустима.


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


Пост 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 );

То есть, вот он действующий ориентир. Еще раз спасибо :)

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


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


Пост N: 28
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 06.01.08 16:06. Заголовок: Здравствуйте. Подс..


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

Подскажите, откуда и как брать "ультрасвежий" Харбор. Оказалось, что уже используется beta4 = 1.0.0, но не могу ее найти. Что такое SVN и т.д.?

И про возможные "непонятки" при компиляции исходников, если они есть.

Спасибо.

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

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




Пост 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


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


Пост N: 29
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 06.01.08 18:00. Заголовок: Pasha пишет: Беспла..


Pasha пишет:

 цитата:
Бесплатный клиент под windows: http://www.tortoisecvs.org



Вроде я уже и сам все это нашел, но вот этот клиент упрямо у меня требует пароля Хотя вроде не должен.

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


Пост N: 344
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 06.01.08 20:23. Заголовок: Небольшое уточнение ..


Небольшое уточнение - для Harbour URL:

https://harbour-project.svn.sourceforge.net/svnroot/harbour-project/trunk/harbour

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




Пост N: 693
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.08 11:44. Заголовок: У кого установлен MS..


У кого установлен MS Visual Studio, просьба. Можно бросить в меня nmake.exe из этого пакета ? Адрес есть в этой теме. С dll, если есть такие, которые нужны для его работы
Нужен для сборки xHarbour. У меня есть какой-то nmake 1.5, но это уж больно старая версия. Не понимает синтаксис makefile.vc


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


Пост N: 345
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 07.01.08 12:06. Заголовок: От VS2003 подойдет?..


От VS2003 подойдет?

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




Пост N: 694
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.08 14:23. Заголовок: Думаю да Как раз too..


Думаю да
Как раз tooklit 2003-года выпуска

Не распознаюся команды вида:

.c.obj::

То есть подряд 2 даоеточия

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




Пост N: 695
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.01.08 16:00. Заголовок: Спасибо, получил, ра..


Спасибо, получил, работает
Петр, если можно, пришлите еще lib.exe. Года 3 назад я собирал xHb под MS VC toolkit, но с тех пор так далеко запрятал эти утилиты (nmake, lib), что и сам не найду
SDK у меня есть


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




Пост 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 типы должны строго соотвествовать обьявленным


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


Пост 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 для переменных?

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

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




Пост 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

Что делать ?


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


Пост 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. Сейчас вышлю посвежее вариант.

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


Пост 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



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




Пост 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 ***



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


Пост N: 32
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 08.01.08 20:18. Заголовок: Andrey пишет: Опять..


Andrey пишет:

 цитата:
Опять не собирается под хХарбором




Вообще, если Вы были внимательны, то уже несколько человек сообщили что под xHarbour все собирается, поэтому думаю, что проблема какая-то у Вас, с путями, lib, и т.п....

'hb_itemPutSymbol' объявлена в hbapiitm.h и она - HB_EXPORT.


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


Пост N: 33
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 08.01.08 23:19. Заголовок: Петр пишет: Это мож..


Петр пишет:

 цитата:
Это можно сделать так, как душе угодно :) Разнообразное API не только помогает, но иногда сбивает с толку.
Пример....



А какие еще есть варианты ;-) За вариант, спасибо, если ничего другого не "придумается", то буду использовать. Но, просто, доступ к переменным через выполнения функций prg-уровня, как то не кажется самым оптимальным решением :)

Кстати, заглянул в реализацию __mvget/__mvset и даже улыбнулся увидев: hb_memvarGetValue/hb_memvarSetValue, то есь то, что сейчас менять и приходится.




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


Пост 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 поменять можно

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