Создание DLL (Различается между Lazarus и Delphi)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Создание DLL (Различается между Lazarus и Delphi)

Сообщение whs » 03.11.2012 10:01:18

Есть исходник написанной DLL на Delphi 7, возникла необходимость перенести на Lazarus. Все компилируется но вот вызвать из программы Окно из своей DLL не получается, либо ничего не происходит (функции ничего не возвращают будто не экспортируются), либо Access Violation. Перелопатил весь интернет пишут что вроде отличие в сборке самой DLL у них это реализовано по разному(ничему не удивлен). но возникает вопрос как собрать совместимую и рабочую DLL.
Аватара пользователя
whs
новенький
 
Сообщения: 28
Зарегистрирован: 03.04.2010 18:07:44

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение alexey38 » 03.11.2012 10:52:56

Попробуйте динамическое подключение, тогда будет ясно хотя бы правильность имен функций.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение NTFS » 04.11.2012 11:20:25

Даже в Delphi вызов классов VCL из dll вызывал много вопросов и проблем. В Lazarus - это очень сложно, потому что:
1) LCL гораздо более "тяжелый" и менее стабильный, чем VCL.
2) Компиляция dll в FreePascal - вообще очень проблемная задача. Собрать-то можно, но вот работоспособность никто не гарантирует :-) ЕМНИП, даже блоки try-except в dll не работают.
Рекомендую либо пересмотреть логику проекта, чтобы не вызывать формы из dll, либо готовиться к долгой и веселой гребле.

Добавлено спустя 2 минуты 42 секунды:
Только что проверил простейшим тестом. Блок try -except в dll просто игнорируется. Пробивает аж до уровня хост-приложения. В Delphi тот же код прекрасно работает. Увы.
NTFS
постоялец
 
Сообщения: 388
Зарегистрирован: 05.11.2007 14:57:50
Откуда: Краснодар

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение whs » 04.11.2012 16:55:20

NTFS писал(а):Даже в Delphi вызов классов VCL из dll вызывал много вопросов и проблем. В Lazarus - это очень сложно, потому что:
1) LCL гораздо более "тяжелый" и менее стабильный, чем VCL.
2) Компиляция dll в FreePascal - вообще очень проблемная задача. Собрать-то можно, но вот работоспособность никто не гарантирует :-) ЕМНИП, даже блоки try-except в dll не работают.
Рекомендую либо пересмотреть логику проекта, чтобы не вызывать формы из dll, либо готовиться к долгой и веселой гребле.

Добавлено спустя 2 минуты 42 секунды:
Только что проверил простейшим тестом. Блок try -except в dll просто игнорируется. Пробивает аж до уровня хост-приложения. В Delphi тот же код прекрасно работает. Увы.


1) Насчет его нестабильности это известный факт.
2) Да я уже это понял, в любом случае гребля будет.
Рекомендация хорошая, только логику не изменить DLL цепляется в сторонний программный комплекс и там внутри реализовано это в виде С подобных скриптов, свободы мало.
Как вариант попробовать передачу в виде исполняемого приложения, либо переписать DLL в Dev-C++ или CodeBlocks или что там есть открытое но стабильное? :D
Аватара пользователя
whs
новенький
 
Сообщения: 28
Зарегистрирован: 03.04.2010 18:07:44

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение dunin » 04.11.2012 16:57:18

whs писал(а):...либо переписать DLL в Dev-C++ или CodeBlocks или что там есть открытое но стабильное? :D

TurboDelphi
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение SSerge » 04.11.2012 17:24:35

dunin писал(а):TurboDelphi


Нету больше этой халявы
"Turbo Delphi is no longer available. We invite you to learn more about the latest version of Delphi and download a free trial"

...и никогда больше не будет халявы от эмбаркадеро.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Sharfik » 27.01.2014 23:59:13

Нет новых ответов по поводу компиляции библиотеки правильно?
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Максим » 28.01.2014 00:12:18

Скажите, а зачем вы откапываете старые треды?

По сути вопроса: пользуйтесь FPC 2.7.1.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Sharfik » 28.01.2014 00:43:40

Максим писал(а):Скажите, а зачем вы откапываете старые треды?

А смысл плодить море одинаковых тем, когда проблема та же что и в теме? Да и по поиску проще находить.
Если библиотека компилируется без ошибок, а loadLibrary не грузит ее, то у меня вот не хватает мозгов, чтобы прочитать мысли компа в момент прохождения loadLibrary и найти ошибку.

Пока докопался что пустую Dll конектить можно, а как дело до взятия значения константы из моего модуля, то финиш.


2.7.1 - не стабильный как я понимаю, судя по тому что 2.6.2 на сайте красуется.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Максим » 28.01.2014 02:48:55

Sharfik писал(а):А смысл плодить море одинаковых тем, когда проблема та же что и в теме? Да и по поиску проще находить.

Смысл в том, что я, прежде, чем ответить, был вынужден просмотреть кучу нерелевантных постов, написанных до исторического материализма.

Sharfik писал(а):2.7.1 - не стабильный как я понимаю, судя по тому что 2.6.2 на сайте красуется.

Вам проблемы решать или потеоретизировать?
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Sharfik » 29.01.2014 23:13:47

Максим писал(а):Вам проблемы решать или потеоретизировать?

Теорию тоже знать надо.
Ладно, не суть. Спасибо, вроде заработало, не сразу правда, но надеюсь больше не будет проблем.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение zoltanleo » 09.02.2014 23:23:26

Sharfik писал(а):вроде заработало, не сразу правда, но надеюсь больше не будет проблем

решением поделиться со всеми нет желания?
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Sharfik » 10.02.2014 11:17:48

zoltanleo писал(а):
Sharfik писал(а):вроде заработало, не сразу правда, но надеюсь больше не будет проблем

решением поделиться со всеми нет желания?

Это грустная история.
Стоял Lazarus 1.0 с fpc 2.6.2, тот что считается последним стабильным.
Функции загрузки Dll работают на ура, но не с библиотеками скомпилированными этим же lazarus. Очень не хотелось, но поставил по совету Максима - fpc 2.7.1, точнее я его нашел, скачал, скомпилировал, а дальше с IDE 1.0 он отказался работать, находя кучу ошибок в модулях которые до этого собирались.
Пришлось скачать Lazarus 1.1 c fpc 2.7.1, на нем dll скомпилировалось без проблем и основная программа ее увидела. И примитивные проверки прошли тестирование. Дальше я завяз пока что, потому что указанная версия IDE из-за непонятной ошибки неожиданного конца файла одного из модулей отказывается добавлять процедуры в код, когда кликаешь дважды по новой кнопке. Вылечил пока что через одно место, сижу с главным приложением вожусь, перенося в него проект. Dll чуть позже буду препарировать. Codetyphon последний так же как lazarus 1.1 себя ведет.

Ну и конечно, dll должны быть той же разрядности что и сама программа их загружающая. Если win32, то win32.

PS: Не могу понять о чем речь, когда говорят что fpc не умеет обрабатывать ошибки в коде dll. Делал тест, в try except засовывал подключение к программе сторонней и если его нет, то там ошибка вываливается. Вот креша программы не было, обработалось все как надо.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 809
Зарегистрирован: 20.07.2013 01:04:30

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Sergei I. Gorelkin » 10.02.2014 12:44:15

Речь о том, что исключение, возникшее в коде dll, обрабатывается программой и его невозможно поймать в самой dll. Если при этом нужно просто показать сообщение об ошибке, то особой разницы нет, но если dll использует исключения в своей логике - все становится очень грустно.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Создание DLL (Различается между Lazarus и Delphi)

Сообщение Максим » 11.02.2014 00:23:56

Sharfik писал(а):указанная версия IDE из-за непонятной ошибки неожиданного конца файла одного из модулей отказывается добавлять процедуры в код, когда кликаешь дважды по новой кнопке

Ну, во-первых, версия 1.1 - это что-то уж очень старое. Сейчас модно использовать 1.2RC2 либо выше.
Во-вторых, пункт меню "Сервис" -> "Пересмотреть каталог исходного кода FPC" должен спасти отца русской демократии. Разумеется, исходный код компилятора должен соответствовать его используемой версии.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 231

Рейтинг@Mail.ru