Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

создание на 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
2-1186122751
p_evghenii
2007-08-03 10:32
2007.08.26
Как подождать завершения чужого процесса


1-1182165752
Makhanev Alexander
2007-06-18 15:22
2007.08.26
Как убить поток...


2-1185996421
Мануха
2007-08-01 23:27
2007.08.26
chart


15-1185433278
record
2007-07-26 11:01
2007.08.26
Поиск


15-1183204733
turbouser
2007-06-30 15:58
2007.08.26
Советские фильмы