Форум » Harbour & HwGUI - русская версия » Проблема с использованием harbour.dll » Ответить

Проблема с использованием harbour.dll

Andrey_V: Опять поднимаю вопрос об 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

Ответов - 4

alkresin: Не знаю, как там с 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 )

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

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


Andrey_V: Собрал свой тестовый пример на 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 ?



полная версия страницы