Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 05.02.19
|
|
Отправлено: 05.02.19 18:46. Заголовок: Использование динамических DLL в консольных приложениях
Использование динамических DLL в консольных приложениях. Собрал DLL - NC.DLL - hbmk2 *.HBP -hbdynvm -lhbct -lhbmainstd -lharbour-32-bcc -lhbmaindllp NC /b /n /q /dDEBUG Вызов в основной программе: hLib := hb_LibLoad( "NC.DLL" ) if !empty( hLib ) && Функции не отрабатывают. xx := HB_DYNCALL({'FileMan1', "NC.DLL"}) hb_DynCall( { 'FileMan1', hLib, HB_DYN_CALLCONV_CDECL }) && Падает по ошибке Error BASE/1001 Undefined function: FILEMAN1 DO('FileMan1') FileMan1() endif hb_LibFree( hLib ) При вызове ошибка: Error BASE/1001 Undefined function: FILEMAN1
|
|
|
Ответов - 23
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 1579
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.02.19 21:43. Заголовок: Судя по всему, идет ..
Судя по всему, идет речь о pcode dll в [x]Harbour Ошиблись разделом. И вообще.. Если не изменяет память, должно быть как-то так цитата: | DYNAMIC FILEMAN1 PROCEDURE Main() LOCAL l := hb_libLoad( hb_libName( "nc" ) ) IF !Empty( l ) FILEMAN1() hb_LibFree( hLib ) ENDIF RETURN |
|
|
|
|
|
| |
Пост N: 1
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 10:44. Заголовок: Не получилось. Опять..
Не получилось. Опять ошибка. Error BASE/1001 Undefined function: FILEMAN1
|
|
|
|
| постоянный участник
|
Пост N: 6173
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.19 11:23. Заголовок: Вот делал пример для..
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 13:46. Заголовок: Андрей, спасибо! Вы..
Андрей, спасибо! Вызовы из системных Dll получается, например: xx := hb_DynCall( { "MessageBoxA", "user32.dll", HB_DYN_CALLCONV_STDCALL}, c1 ,; c2 ,; hb_bitOr( MB_OKCANCEL, MB_ICONEXCLAMATION ) ) Вызов функции из моей DLL hLib := hb_libLoad( hb_libName( 'E:\TEST_H\NC.DLL' ) ) xx := hb_DynCall( { 'FileMan1', hLib, HB_DYN_CALLCONV_SYSCALL }) возвращает NiLL. А мне нужно вызвать ф-цию которая, например строит отчет по данным системы. Я хочу перевести довольно большую систему написанную на Clipper 5,2 (сборка Blinker) на Харбор. Система состоит из 1-го EXE файла и нескольких DLL файлов. Пока терминальный вариант. На сколько актуально в Харборе использовать DLL файлы для программы пока не знаю. Решил проверить такую возможность. А насколько большие exe файлы может формировать Харбор без ущерба по скорости работы ПО?
|
|
|
|
| постоянный участник
|
Пост N: 6174
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.02.19 14:59. Заголовок: Aleksandr_D пишет: ..
Aleksandr_D пишет: Смотри как у меня в исходнике: uRet := hb_DynCall( { "MG_square", hDllHandle, HB_DYN_CTYPE_INT }, 64 ) MsgDebug("Calling the C ++ function of MG_square() - Passing values=64, uRet=",uRet) или uRet := hb_DynCall( { "MG_divv", hDllHandle, HB_DYN_CTYPE_DOUBLE }, 10.0, 2.2 ) MsgDebug("Calling the C ++ function of MG_divv() - Passing values=(10.0 / 2.2), uRet=",uRet) HB_DYN_CTYPE_INT / HB_DYN_CTYPE_DOUBLE - тип возвращаемого значения. Aleksandr_D пишет: цитата: | На сколько актуально в Харборе использовать DLL файлы для программы пока не знаю. Решил проверить такую возможность. |
| Не знаю как делать DLL на Харборе. Сделал один большой ехе-ник и не пожалел. У меня большая терминалка (12 Мб текста исходников) собирается примерно в 6,1 Мб ехе-ник Думаю что ОДИН ехе-ник лучше чем разбивка его на несколько dll. Ехе-ник уже загружен в памяти, а dll-ку нужно подгружать, время на это тратиться конечно немного, но мне не понравилось такая разбивка своей терминалки.
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 15:09. Заголовок: Задача решена. Пробл..
Задача решена. Проблема была в не корректности параметров сборки. Вот описание программ и параметров сборки. && MAIN.PRG – файл программы ********************************************** DYNAMIC FILEMAN1 && Декларация используемых в DLL функций FUNCTION Main() hLib := hb_libLoad( hb_libName( 'E:\TEST_H\NC.DLL' ) ) IF !Empty( hLib ) && варианты вызова DO('FileMan1') FILEMAN1() hb_LibFree( hLib ) ENDIF RETURN && NC.PRG – файл DLL ************************************************** && Декларация используемых в основной программе функций DYNAMIC BOXSHADOW …… DYNAMIC DISPWINDOW FUNCTION FileMan1() …. RETURN RetVal && MAIN.HBP ************************************************** && Сборка для основной программы -hbexe -n -prgflag={win}-DGTWVT -gui -std # paths to the main and extension * .Lib -lhbct -lhbmaindllh -lhbmaindllp -lharbour-32-bcc -lhbdebug MAIN.PRG /b /n /q /dDEBUG /dGTWVT && NC_DLL.HBP ****************************************** && Сборка для DLL -hbdynvm # the name of the module -oNC.DLL # paths to the main and extension * .Lib -lhbct -lhbmainstd -lharbour-32-bcc -lhbmaindllp -lhbmaindllh # список *.prg и *.c NC.prg /b /n /q /dDEBUG PS: спасибо всем.
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 15:26. Заголовок: Andrey пишет: Дума..
Andrey пишет: цитата: | Думаю что ОДИН ехе-ник лучше чем разбивка его на несколько dll. ..... |
| Андрей, спасибо за ответ! Согласен что один Ехе-ник - удобно. В dll-ки я переношу функционал которые редко используется пользователями. Или "архивный" функционал (например отчетные формы которые уже не используются)
|
|
|
|
| постоянный участник
|
Пост N: 1500
Зарегистрирован: 27.01.07
|
|
Отправлено: 06.02.19 15:28. Заголовок: Aleksandr_D пишет: ..
Aleksandr_D пишет: цитата: | В dll-ки я переношу функционал которые редко используется пользователями. Или "архивный" функционал (например отчетные формы которые уже не используются) |
| Не забывайте про Dll hell
|
|
|
|
| |
Пост N: 8
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 15:34. Заголовок: PSP пишет: Не забыв..
PSP пишет: цитата: | Не забывайте про Dll hell |
| Что Вы имеете в виду?
|
|
|
|
| постоянный участник
|
Пост N: 1501
Зарегистрирован: 27.01.07
|
|
Отправлено: 06.02.19 15:49. Заголовок: https://ru.wikipedia..
|
|
|
|
| |
Пост N: 9
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 15:58. Заголовок: PSP пишет: https://..
PSP пишет: цитата: | https://ru.wikipedia.org/wiki/DLL_hell |
| Ясно. Спасибо! Разбивку программ на DLL использую с 2000-го года.
|
|
|
|
|
| постоянный участник
|
Пост N: 1502
Зарегистрирован: 27.01.07
|
|
Отправлено: 06.02.19 16:10. Заголовок: По мне - лишнее это...
По мне - лишнее это. Учитывая нынешние размеры ОЗУ и механизмы управления памятью в современных ОС, лучше всё в exe-шнике. Это моё имхо.
|
|
|
|
| |
Пост N: 10
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 16:15. Заголовок: PSP пишет: По мне -..
PSP пишет: цитата: | По мне - лишнее это. Учитывая нынешние размеры ОЗУ и механизмы управления памятью в современных ОС, лучше всё в exe-шнике. Это моё имхо. |
| Согласен. Это "старое наследие" от которого нужно будет избавляться.
|
|
|
|
| Администратор
|
Пост N: 3826
Зарегистрирован: 23.05.05
|
|
Отправлено: 06.02.19 16:33. Заголовок: Я использую другой п..
Я использую другой подход. Не в целях экономии памяти, а для облегчения дистрибуции. Скажем, множество сервисных функций выделяю в отдельную dll. И теперь при изменении в ней некоторого функционала я не пересобираю десяток-другой exe, а пересобираю единственную dll Для "облегчения" самих exe использую harbour*.dll, таким образом сами exe не содержат harbour vm и rtl, а только свой функционал.
|
|
|
|
| |
Пост N: 11
Зарегистрирован: 05.02.19
|
|
Отправлено: 06.02.19 17:02. Заголовок: Я использую другой подход....
Pasha пишет: [quote]` Спасибо за информацию. "Для "облегчения" самих exe использую harbour*.dll, таким образом сами exe не содержат harbour vm и rtl, а только свой функционал." - так и постарался сделать (см. описание выше Пост. 4), хотя скорее всего что то упустил.
|
|
|
|
| постоянный участник
|
Пост N: 2200
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.02.19 20:38. Заголовок: Aleksandr_D Не забы..
Aleksandr_D Не забывайте про hrb, полученные из prg. Их можно пихать в ресурсы exe или dll, zip ... Можно хранить prg и hrb получать на лету ... hrb маленькие по размеру.
|
|
|
|
| |
Пост N: 12
Зарегистрирован: 05.02.19
|
|
Отправлено: 07.02.19 12:09. Заголовок: Не забывайте про hrb, полученные из prg. ....
SergKis пишет: цитата: | Не забывайте про hrb, полученные из prg. |
| SergKis, спасибо за информацию! Я использую Харбор только 3-ий день. Не подскажите где более подробно об этом можно почитать.
|
|
|
|
| |
Пост N: 7015
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.02.19 12:17. Заголовок: Aleksandr_D пишет: ..
|
|
|
|
| |
Пост N: 13
Зарегистрирован: 05.02.19
|
|
Отправлено: 07.02.19 13:54. Заголовок: Dima пишет: Дмитр..
Dima пишет: [quote]` Дмитрий, спасибо!
|
|
|
|
| постоянный участник
|
Пост N: 2201
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.02.19 19:56. Заголовок: Aleksandr_D пишет Я ..
Aleksandr_D пишет цитата: | Я использую Харбор только 3-ий день. Не подскажите где более подробно об этом можно почитать. |
| Почитать - это хорошо, а посмотреть на текстах лучше. https://github.com/elchs/LetoDBf => source\server.prg : STATIC PROCEDURE leto_hrbLoad( cData ) PROCEDURE leto_UdfReload( cData )
|
|
|
Ответов - 23
, стр:
1
2
All
[только новые]
|
|