AuthorTopic



link post  Posted: 06.12.06 01:41. Post subject: Проблема с использованием harbour.dll


Опять поднимаю вопрос об DLL.
Хочу использовать harbour.dll, взял создал тестовую программу,
"скормил" её hbmake, указал там [x] use xHarbour[.dll|.so]

в библиотеках было
LIBFILES = optcon.lib harbour.lib

подсказали поставить Harbour.lib первой.
Не собирается. Выдал следующее сообщение:

Z:\BCC55\BIN\ilink32 @makefile.lnk
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_main' referenced from Z:\BCC55\LIB\C0X32.OBJ

Подсказали добавить к библиотекам dllmain.lib

Частично получилось. Собирается exe-ник нормально без предупреждений.
Запускаю его, даже на экран выводит, а далее по программе цикл с выводом
на экран и выскакивает окно:
"Ошибка приложения"
Инструкция по адресу "0x004583bc" обратилась к памяти по адресу "0x00000014".
Память не может быть "read".

Как правильно собрать в hbmake ? (у меня несколько проектов в нем)

Ниже привожу test.prg
--------------------------------------------------------------
FUNCTION MAIN()
LOCAL nI, nJ:=1, nY:=8, nX:=0 , cNameWin
SETCOLOR("15/1")
CLEAR SCREEN
TEXT
-------- -------- ------- --------
-- -- -- -- --
-- -- -- --
-- -------- -- --
-- -- -- -- --
-- -------- ------- --
ENDTEXT
wait
FOR nI := 0 TO 255
@ nJ + nY, nX SAY ALLTRIM(STR(nI))+" "+CHR(nI) COLOR("15/0")
nJ++
IF nJ > 19
nJ := 1
nX := nX + LEN(ALLTRIM(STR(nI)))+3
ENDIF
NEXT
INKEY(0)
RETURN NIL
--------------------------------
Ниже test.bc

#BCC
VERSION=BCB.01
!ifndef CC_DIR
CC_DIR = $(MAKE_DIR)
!endif

!ifndef HB_DIR
HB_DIR = $(HARBOUR_DIR)
!endif

RECURSE= NO

COMPRESS = NO
EXTERNALLIB = YES
XFWH = NO
FILESTOADD = 5
WARNINGLEVEL = 0
USERDEFINE =
USERINCLUDE =
GUI = NO
MT = NO
SRC02 = obj
PROJECT = test.exe $(PR)
OBJFILES = $(SRC02)\TEST.obj $(OB)
PRGFILES = TEST.PRG $(PS)
OBJCFILES = $(OBC)
CFILES = $(CF)
RESFILES =
RESDEPEN =
TOPMODULE = TEST.PRG
LIBFILES = harbour.lib dllmai.lib
EXTLIBFILES = optcon.lib lang.lib vm.lib rtl.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib dbffpt.lib common.lib gtwin.lib codepage.lib ct.lib tip.lib pcrepos.lib hsx.lib hbsix.lib
DEFFILE =
HARBOURFLAGS = -w0
CFLAG1 = -OS $(CFLAGS) -d -c -L$(HB_DIR)\lib
CFLAG2 = -I$(HB_DIR)\include;$(CC_DIR)\include
RFLAGS =
LFLAGS = -L$(CC_DIR)\lib\obj;$(CC_DIR)\lib;$(HB_DIR)\lib -Gn -M -m -s -Tpe -x -ap
IFLAGS =
LINKER = ilink32

ALLOBJ = c0x32.obj $(OBJFILES) $(OBJCFILES)
ALLRES = $(RESDEPEN)
ALLLIB = $(LIBFILES) import32.lib cw32.lib
.autodepend

#DEPENDS

#COMMANDS
.cpp.obj:
$(CC_DIR)\BIN\bcc32 $(CFLAG1) $(CFLAG2) -o$* $**

.c.obj:
$(CC_DIR)\BIN\bcc32 -I$(HB_DIR)\include $(CFLAG1) $(CFLAG2) -o$* $**

.prg.obj:
$(HB_DIR)\bin\harbour -D__EXPORT__ -n -go -I$(HB_DIR)\include $(HARBOURFLAGS) -o$* $**

.rc.res:
$(CC_DIR)\BIN\brcc32 $(RFLAGS) $<

#BUILD

$(PROJECT): $(CFILES) $(OBJFILES) $(RESDEPEN) $(DEFFILE)
$(CC_DIR)\BIN\$(LINKER) @&&!
$(LFLAGS) +
$(ALLOBJ), +
$(PROJECT),, +
$(ALLLIB), +
$(DEFFILE), +
$(ALLRES)
!
----------------------------------
Может на анг. форум написать, только у меня с английским туго !

P.S. Залез в папку xHarbour\tests, там есть dll_b32.bat
Пробовал его запускать, не собирает, выдает:

MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
..\bin\b32\harbour.exe -n -i..\include -w1 disptest.prg -o.\disptest.c

** error 1 ** deleting .\disptest.c


Спасибо: 0 
ProfileQuote Reply
Replys - 4 [new only]


administrator


link post  Posted: 06.12.06 13:51. Post subject: Re:


Не знаю, как там с hbmake - никогда не работал с ним и не пробовал в xHarbour.
А в Harbour это делается так:

set HB_PATH=c:\harbour

%HB_PATH%\BIN\harbour %1.prg -n -i%HB_PATH%\INCLUDE %2 %3

bcc32 -c -O2 -d -I%HB_PATH%\INCLUDE %1.c
%HB_PATH%\source\vm\mainwin.c

@echo c0w32.obj + > b32.bc
@echo %1.obj + >> b32.bc
@echo mainwin.obj,+ >> b32.bc
@echo %1.exe, + >> b32.bc
@echo , + >> b32.bc
@echo %HB_PATH%\LIB\harbour-b32.lib + >> b32.bc
@echo cw32.lib + >> b32.bc
@echo import32.lib, >> b32.bc

ilink32 -Tpe -Gn @b32.bc

( В Harbour dll называется harbour-b32.dll )
mainwin.c - вместо xHarbour'ского dllmain.lib, он и в xHarbour есть, так что, по идее, этот скрипт и там должен работать ( только переименовать harbour-b32.lib в harbour.lib )


Спасибо: 0 
ProfileQuote Reply



link post  Posted: 06.12.06 22:30. Post subject: Re:


Залез в папку xHarbour\tests, там есть dll_b32.bat
исправил пути, заработало.
Собираються маленькие примеры, но не все.
Тоже вылетает с ошибкой: адреса разные и то-же "типа память не может....."
Думаю что-то с этой версией xHarbour'a 0.99.60
Помогите пожалуйста разобраться.


Спасибо: 0 
ProfileQuote Reply
administrator


link post  Posted: 07.12.06 11:09. Post subject: Re:


В Harbour работает нормально - специально собрал сейчас большую программу ( Зарплата ) с dll.
А про xHarbour ничего не могу сказать - я им не пользуюсь.

Спасибо: 0 
ProfileQuote Reply



link post  Posted: 08.12.06 20:28. Post subject: Re:


Собрал свой тестовый пример на xHarbour Compiler build 0.99.61, все прекрасно работает.
harbour.dll имеет размер 2 160 128 байт, а harbour.dll версии 0.99.60 - 1 902 080 байт.
А на xHarbour Compiler build 0.99.60 вылетает с ошибкой типа ....Память не может быть "read"
Вывод надо пересобрать harbour.dll в версии 0.99.60.
А как ?
Есть ли в нем стандартые средства пересборки harbour.dll ?

Спасибо: 0 
ProfileQuote Reply
Reply:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Username, Password:      register    
Тему читают:
- user online
- user offline
All times are GMT  3 Hours. Hits today: 0
You can: smiles yes, images yes, types yes, poll no
avatars yes, links on, premoderation off, edit new post no



Создай свой форум на сервисе Borda.ru
Текстовая версия