Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Внизсоздание на Delphi dll для Матлаба Найти похожие ветки
← →
Tdu © (2007-07-23 13:44) [0]Для ускорения работы программы на Матлабе хотелось бы наиболее часто используемые функции и процедуры оформить в виде dll. Однако, я не владею C++. Попробовал создать dll на Delphi, однако Матлаб отказался ее воспринять.
Кто-нибудь имеет опыт создания на Delphi библиотек dll для Matlab?
← →
umbra © (2007-07-23 13:52) [1]
> библиотек dll для Matlab
а чем они отличаются от обычных длл?
← →
Inco (2007-07-23 16:42) [2]Если нужна спецификация вызова С - надо ставить модификатор функции cdecl.
Конечно, если Матлаб воспринимает "обычные" dll...
← →
TUser © (2007-07-23 16:58) [3]
> cdecl.
sdcall
← →
Loginov Dmitry © (2007-07-24 00:03) [4]> Для ускорения работы программы на Матлабе хотелось бы наиболее
> часто используемые функции и процедуры оформить в виде dll.
> Однако, я не владею C++. Попробовал создать dll на Delphi,
> однако Матлаб отказался ее воспринять.
> Кто-нибудь имеет опыт создания на Delphi библиотек dll для
> Matlab?
жесть! А как потом из Матлаба эти функции будут вызываться? (интересно просто, т.к. сам ни разу не видел)
← →
Loginov Dmitry © (2007-07-24 00:04) [5]кстати, можно DLL-ку как СОМ-сервер сделать. В Матлабе поддержка СОМ/DСОМ реализована весьма неплохо.
← →
Tdu © (2007-07-24 07:11) [6]Уточняю проблему:
dll, когда-то написанная для меня моим коллегой на C++, работает в Матлабе без проблем: я обращаюсь к ней по имени ddl-ки, как к обычной процедуре, описанной в Матлабе. К сожалению, я сейчас не могу пользоваться услугами этого коллеги, поэтому и решил создавать dll-ки сам, но я владею только Матлабом и Delphi.
Из руководства по Delphi:
«Для того, чтобы правильно осуществлять вызовы процедур и функций, хранимых в DLL, а также создавать DLL, которые могут быть использованы разработчиками, применяющими не Delphi, а другие инструменты, следует описывать подпрограммы с указанием соглашения о вызове, называемым стандартным, принятым в C++. Для этого после описания процедуры указывается ключевое слово stdcall.»
При создании dll я перепробовал все варианты: не только stdcall, но и cdecl, safecall, register, pascal. Однако результат был один и тот же: при попытке обратиться к dll Матлаб отвечал:
Mex file entry point is missing. Please check the (case-sensitive)
spelling of mexFunction (for C MEX-files), or the (case-insensitive)
spelling of MEXFUNCTION (for FORTRAN MEX-files).
??? Invalid MEX-file
← →
Сергей М. © (2007-07-24 09:12) [7]
> Tdu © (24.07.07 07:11) [6]
Это
http://www.softru.net.ru/publ/1-1-0-1
читал ?
mex.pas имеешь ?
← →
Сергей М. © (2007-07-24 10:01) [8]Учись, студент, гуглить)
http://www-user.tu-chemnitz.de/~heha/viewzip.cgi/messtech/pasmex32.zip/pasmex32.pas?auto=PAS
← →
Tdu © (2007-07-24 12:07) [9]1) Посмотрел ссылку http://www.softru.net.ru/publ/1-1-0-1. Но ведь там "Программирование на языке С для пакета MATLAB", а мне нужно на Delphi для MATLAB.
2) mex.pas не нашел. А для чего?
← →
Сергей М. © (2007-07-24 12:12) [10]
> Но ведь там "Программирование на языке С для пакета MATLAB",
> а мне нужно на Delphi для MATLAB
Причем здесь С ? Ты общую концепцию организации взаимодействия, изложенную в статье, изучил ?
> mex.pas не нашел. А для чего?
А ты что, прототип своей ф-ции mexFunction() выбираешь от балды ?)
← →
Tdu © (2007-07-25 11:23) [11]Увы, моих познаний пока не хватило, чтобы реализовать эту идею.
Т.е. example, приведенный в шапке, реализовался, т.е. получилась dll, при обращении к которой из Матлаба выдается сообщение "Hallo Welt" (правда для этого пришлось заменить stdcall на cdecl). А вот добиться что-нибудь более полезного пока не удается.
Сергей, а ты сам попробовал?
Можешь привести алгоритм получения на Delphi dll-ки, в которой была бы реализована фукция рассчета, например, гипотенузы по двум катетам? Т.е. чтобы при наборе в Матлабе Gipoten(3,4) он выдавал 5, а не ругался "Invalid MEX-file"?
← →
Tdu © (2007-07-25 12:54) [12]Я имею в виду паскалевский текст для library.
← →
Сергей М. © (2007-07-26 10:07) [13]
> а ты сам попробовал?
Нет, не пробовал.
Про MatLab мне известно лишь название и общее назначение пакета.
Все остальное, изложенное мной, я почерпнул из Тырнета (просто из любопытства и для общей ориентировки в сабже на будущее).
> чтобы при наборе в Матлабе Gipoten(3,4) он выдавал 5, а
> не ругался "Invalid MEX-file"
Судя по инф-ции в приведенных ссылках, первое, что ты должен соблюсти :
- твоя библиотека должна иметь имя Gipoten.dll и находиться в одной из известных системе или МатЛабу директорий поиска (например, ($WINDOWS)\system32 или директория бин.файлов самого МатЛаба)
1. библиотека должна экспортировать как минимум одну процедуру (для МатЛаб5 - stdcall, для прочих не знаю) с именем "mexFunction", именно в таких регистрах символов и никаких иных, т.е. никакой отсебячины, иначе МатЛаб откажется с такой библ-кой, как в твоем примере [6]
2. прототип процедуры mexFunction должен соответствовать приведенному по ссылке в [8], там же приведены прототипы ф-ций в составе MatLab API.
Протокол инф.обмена (ПИО) между МатЛабом и мех-модулями довольно детально изложен по ссылке в [7]
Судя по увиденному тобой сообщению "Hallo Welt" п.1 был тобой соблюден, иначе МатЛаб повторил бы отказ вида [6]
Осталось дело за малым - в соответствии с п.2 и в полном соответствии с ПИО принять вх.параметры, обработать их и вернуть результаты обработки в вых.параметры.
- процедура
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c