|
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 3
|
||||||
Matlab dll и Delphi05.08.2011, 10:11. Показов 12809. Ответов 18
Метки нет (Все метки)
Необходимо связать dll, созданную в MATLAB, и программу, написанную в Delphi.
Для пробы создаю additor.m: function result = additor(x,y) result = x + y; Командой 'mcc -l additor.m' MATLAB Version 7.7.0.471 (R2008b) создаётся additor.dll и ещё куча файлов. При просмотре dll видны следующие функции Imports/Exports: _additorGetMcrID _additorInitialize _additorInitializeWithHandlers _additorPrintStackTrace _additorTerminate _mlfAdditor _mlxAdditor Далее, в Delphi 6.0 пишу следующий код:
В чём тут может быть дело?
0
|
||||||
| 05.08.2011, 10:11 | |
|
Ответы с готовыми решениями:
18
Подключение DLL - файлов к MatLab Простейший DLL на С и его loadlibrary in matlab Delphi and matlab |
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 12.12.2011, 15:57 | |
|
Вопрос еще актуален?
0
|
|
|
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 3
|
|
| 12.12.2011, 17:51 [ТС] | |
|
Да, вопрос ещё актуален.
0
|
|
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|||||||||||
| 13.12.2011, 13:55 | |||||||||||
|
Я тоже долго бился, прежде чем смог заставить свое Delphi приложение нормально воспринимать dll, созданные из m-файлов. Я так понял, что нужно создать автономное приложение, которое использовало бы мат. возможности MatLab?
В общем наткнулся на это: http://sevntu.com.ua/jspui/bit... 100002.pdf Там подробно описано как делать dll через матлабовский DeploymentTool и предоставлен код Delphi. Только как я понял, это пройдет на матлаб 7. А у меня был 2010b. В общем, как написано в статье не получилось ![]() Я сделал так: 1)Создал dll через Deployment Project (см. статью) 2)Установил среду MCR (см. статью) 3)(Теперь важно, именно после этого заработало!) Добавил в переменные среды три константы ведущие к MCR, чтобы приложение видело библиотеки. В моем варианте: C:\Program Files\MATLAB\MATLAB Compiler Runtime\v714\runtime\win32; C:\Program Files\MATLAB\MATLAB Compiler Runtime\v714\runtime\bin; C:\Program Files\MATLAB\MATLAB Compiler Runtime\v714\bin\win32; ОБЯЗАТЕЛЬНО ПЕРЕД константами, связанными с директорией, куда установлен матлаб, иначе приложение тупит и вылетает без ошибок и предупреждений. Теперь по поводу кода. Я не использовал функцию mclInitializeApplication, как сказано в статье. Во-первых и без нее все работает, а во-вторых, я ее попросту не нашел. Была только mclInitializeApplication_proxy. Но от нее толку не было. Достаточно просто инициализировать свою dll. При директиве StdCall все работало но вылезали ошибки, которые пропали при смене StdCall на Cdecl. Как я понял из статьи, то все экспортируемые функции из созданной в матлабе dll это процедуры. Т.е. к ним нельзя обратиться в выражении (может это не точно, надо бы еще раз перечитать). Там первый параметр - число выходных параметров (Integer), а остальное - выходные и входные параметры. Например функция для перемножения матриц (см статью) у меня описана так:
2
|
|||||||||||
|
0 / 0 / 0
Регистрация: 05.08.2011
Сообщений: 3
|
|
| 14.12.2011, 10:25 [ТС] | |
|
Спасибо! Буду пробовать!
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 8
|
|||||||
| 14.02.2012, 10:59 | |||||||
|
Сделал все кроме этого и правда вылетает программа без ошибок и предупреждений. Правда я пользуюсь mclInitializeApplication(0,0); - нормально проходит _matr_dllInitialize; - при ее вызове вылетает программа без предупреждений а при вызове _mlfPlusvak(1,C,A,B); (функция для сложения) - вылетает с ошибкой (принтскрин прикреплен к посту) на всякий случай привожу код
0
|
|||||||
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
||||||||||||
| 14.02.2012, 17:14 | ||||||||||||
|
И еще, у Вас названия функций начинаются с "_". Проверьте это, поскольку у меня название начинаются просто с mlf. Советую просмотреть созданную dll утилиткой Depends. Добавлено через 52 минуты Вот еще код приложения, которое решает систему F(x) = 0, беря ее из текстового файла, а начальные приближения задаются вручную.
2
|
||||||||||||
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 15.02.2012, 15:50 | |
|
У Вас в папке проекта Dephi находятся два файла: libmx.dll и mclmcr.dll, чего быть не должно. Эти же файлы лежат в директории, куда ставился MCR. Собственно для этого и прописывались пути, чтобы Ваше приложение не найдя в текущей директории нужные dll начало их искать по системным путям. А пути-то как раз ведут к MCR, где есть все нужные dll-ки. В директории экзэшника нужно оставить только свою dll.
Я запускал ваш проект, только убрал строку "mclInitializeApplication(0,0);" и еще убрал из проекта какой-то Unit. Все работает замечательно. Вместо nil появляется значение.
1
|
|
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 15.02.2012, 16:08 | |
|
Вот еще архивчик с dll-кой
1
|
|
|
0 / 0 / 0
Регистрация: 14.02.2012
Сообщений: 8
|
|||||||||||||
| 17.02.2012, 14:18 | |||||||||||||
|
Просмотрел файлы mclmcr.dll. В версии 7.14 действительно нет mclInitializeApplication, а в версии 7.8 - есть. Стал искать аналогичную функцию, потому что без нее, у меня почему то ничего не работало. нашел вот такую - mclmcrInitialize и запустил ее. И о чудо, всё заработало. Смеха ради закомментировал ее и тоже все работало и без нее. Кароче чудеса какие то. Суть в том, что покрайней мере стало работать. Спасибо вам за помощь =) Теперь встал другой вопрос, почему то выполнении dll процедур матлабовских в дельфи медленней примерно раз в 5 чем в самом матлабе :o Проверял на Фурье fft и еще одной. Причем опять "очевидное невероятное" = если запустить процедуру второй раз, третий ... то время уменьшается, до какого то приемлемого значения. Вот сделал небольшую программку ![]() Матлабовская функция
Дельфи же требуется при первом вызове процедуры 88 мсек, при втором 10,67 мсек; и при третьем уже 0,65 мсек. Время засекаю только на работу самой процедуры dst1. Т.е. всякая инициализация, подготовка данных и т.д. не считаются. Как бы мне сразу получать время на выполнение процедуры, а не в третий раз? Я думал что дельфи наоборот быстрей должно обрабатывать чем матлаб.На всякий случай добавил архив с проектом и dll.
0
|
|||||||||||||
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 20.02.2012, 16:07 | |
|
У себя наблюдаю такую же картину =)
Если честно, то не знаю, чем это может быть вызвано. На мой взгляд, первый долгий вызов dll долгий объясняется тем, что сначала инициализируется созданная dll и часть необходимых ресурсов, а не ресурсы на которые она потом будет ссылаться, т.е. другие dll-ки. Повторная инициализация dll происходит почти мгновенно. А с первым запуском расчета должна быть та же самая картина. Первый запуск долгий, а потом время выполнения практически такое же, как в матлабе. Может быть это связанно с работой MCR, что она динамически что-то подгружает. Расшифровывается-то как Matlab Component Runtime. Там в статье, ссылку на которую я выше выкладывал, что-то было про функционирование этой среды. Думаю, что Runtime здесь ключевое слово, которое и объясняет это странное поведение. В любом случае, это черный ящик, залезть в который не представляется возможным. На всякий случай выкладываю свой проект, который решает систему уравнений. Может пригодится. У меня первая инициализация проходит примерно за 6 сек., потом <1 cек. Первый расчет также примерно 6-7 сек., потом занимает ~1-2 сек.
0
|
|
|
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 14
|
|
| 20.03.2013, 11:28 | |
|
Добрый день, помогите. Пытаюсь сделать, что у вас уже получилось... Установил mcr 7.14 , запускаю exe solver - не запускается , пишет "Запуск программы невозможен, так как на компьютере отсутствует libmx.dll. "
У меня windows 7 , пути прописал... Что может быть? Добавлено через 16 минут Вопрос снимается, моя ошибка. Неправильно переменные среды прописал. Буду пытаться явно библиотеки указывать. Надо тему продолжать, многие тулбоксы можно использовать))
0
|
|
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 20.03.2013, 12:41 | |
|
Я пытался с этим разобраться, когда искал считалку для своей задачи. После многих попыток и неудач наткнулся на библиотечку Intel MKL (Math Kernel Library). Хоть она и написана для C++ но из Delphi ее тоже просто использовать. Поэтому я забил на матлаб, сейчас использую MKL проблем нет.
0
|
|
|
0 / 0 / 0
Регистрация: 20.03.2013
Сообщений: 14
|
|
| 20.03.2013, 13:52 | |
|
Интересно.. надо будет посмотреть. Мне нужен только fuzzy logic toolbox из целого матлаба. Нигде не встречался?
0
|
|
|
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
|
|
| 20.03.2013, 16:36 | |
|
Нет, не встречался.
0
|
|
|
0 / 0 / 0
Регистрация: 05.06.2015
Сообщений: 1
|
||||||||||||||||
| 05.06.2015, 18:45 | ||||||||||||||||
Объявляю у себя в программе на Делфи
--------------------------- Debugger Fault Notification --------------------------- Project C:\Documents and Settings\Ôåññ\Ðàáî÷èé ñòîë\Íîâàÿ ïàïêà\Ïðîãðàììà\Diplom.exe faulted with message: 'access violation at 0x7ba0d701: read of address 0x00000019'. Process Stopped. Use Step or Run to continue. --------------------------- OK --------------------------- Что я делаю не так?
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 4
|
|
| 10.01.2016, 22:38 | |
|
Ребят, спасибо огромное - хоть что-то понял. Только одно смущает - у меня матлаб 2015b и делфи xe3 sp2. Так вот при запуске кода выдает "Точка входа в процедуру mxTranspose не найдена в библиотеке DLL", причем, зараза, даже не указывает в какой. Объявлена как и в примерах выше - function mxTranspose; external 'libmx.dll' name 'mxTranspose'; На остальные ф-ции не ругается - только на транспорирование. А без него - "NIL" и все ты тут. Кто поможет советом?
0
|
|
|
0 / 0 / 0
Регистрация: 14.05.2015
Сообщений: 1
|
|
| 30.06.2016, 08:55 | |
|
помогите написать программку для решения системы нелинейных уравнений в matlab. которую можно вызвать через delphi. пожалуйста
0
|
|
| 30.06.2016, 08:55 | |
|
Помогаю со студенческими работами здесь
19
Inline-функции Matlab + Delphi Matlab Wavelet Morlet для Delphi
Сортировка выбором,перевод кода из Delphi в Matlab можно ли в Matlab создать библиотеку для С++ и использовать ее без вызова Matlab? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|