2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Использование (написанной в Delphi) DLL в Maple
Сообщение04.01.2015, 01:41 


04/01/15
7
Есть .dll написанная в Delphi. В ней набор функций расчитывающий параметры влажного воздуха. Как вменяемо подключить данную библиотеку к Maple. Справка гласит что теоретически это возможно. Однако доступного примера нигде нет. Помогите.

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 01:52 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Den23 в сообщении #956046 писал(а):
Справка гласит что теоретически это возможно.
Что именно гласит справка?

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 02:06 


04/01/15
7
В справке предлагается функция define_external. Однако не выход подключить. Библиотеку сам писал. Она рабочая в среде Delphi. Но вот как подключить к Maple. Вся информация которая есть в нете умещается в след ссылке
http://www.maplesoft.com/support/help/M ... y&term=dll
Хотелось бы услышать сосветы тех кто уже такое проделывал.

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 02:14 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Там же явно указано, что поддерживаются библиотеки, написанные на C, Fortran или Java.

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 02:20 


04/01/15
7
Согласен, однако возникает сомнение, что нет других механизмов, позволяющих подключить библиотку. По идее .dll вещь универсальная. Возможно можно сделать какие-то манипуляции с .dll Генерировал на ее основе .lib файл. Но результатов нет((

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 02:28 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Den23 в сообщении #956060 писал(а):
По идее .dll вещь универсальная.
Ха, если бы.

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение04.01.2015, 15:30 
Заслуженный участник


12/07/07
4529
В Borland Delphi можно попробовать выкрутиться при помощи директивы cdecl (которая указывает использовать принятое в C соглашение о вызовах). UPD (5.12.2015) Я не прочитал внимательно документацию и написал неправильно (см. сообщение post1079782.html#p1079782 ниже в этой теме). Хотя приведенный пример работает, но это скорее счастливая случайность.

Простейший пример библиотеки на BD5
код: [ скачать ] [ спрятать ]
Используется синтаксис Delphi
library Tst;

function mul(x, y: Double): Double; cdecl;
begin
 Result:= x*y;
end;

function IPower(Base: Double; Exponent: Integer): Double; cdecl;
var i: integer;
begin
 Result:= 1; for i:=Exponent downto 1 do Result:= Result*Base;
end;

exports mul, IPower;

end.
И рабочего листа Classic Worksheet Maple 12
Код:
> dmul:= define_external('mul', x::float[8], y::float[8], RETURN::float[8], LIB="Tst.dll"):
> ip:= define_external('IPower', x::float[8], y::integer[4], RETURN::float[8], LIB="Tst.dll"):
> dmul(2, 3);
      6.0
> ip(2.0, 3);
      8.0
> ip(-3.0, 3);
    -27.0


-- Sun 04.01.2015 14:36:13 --

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

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение07.01.2015, 00:34 


04/01/15
7
Идея отличная. Но почему-то не выходит. Работаю на Maple 14. Бибилиотека пишется в Embarcadero® Delphi® XE Version 15.0.3953.35171. Версия имеет значение? Если можно, скиньте проджекты написанного выше примера.. Был бы очень благодарен. sibium@inbox.ru

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение07.01.2015, 01:46 
Аватара пользователя


28/01/12
467
Den23 в сообщении #957690 писал(а):
Идея отличная. Но почему-то не выходит.

А библиотека у вас точно создается? Вы проверили вызов функций из этой библиотеки?
Вот пример как это сделать и проверить непосредственно в RAD studio XE:
https://www.youtube.com/watch?v=NAQ8yMJFlgo

 Профиль  
                  
 
 Re: Использование DLL в Maple
Сообщение07.01.2015, 15:10 
Заслуженный участник


12/07/07
4529
Den23, Embarcadero XE у меня нет. Нет и Maple 14.
Я скомпилировал библиотеку-пример (из предыдущего сообщения) в Embarcadero XE4 под Win32. И в Classic Worksheet Maple 15, и в стандартном интерфейсе Maple 15 рабочий лист из моего предыдущего сообщения работает без изменений.
Но так всё хорошо будет только в случае примитивного примера. Если тип функции будет другим, то могут возникнуть затруднения.
Upd. Что скидывать на почту, я не понял. Проект Delphi и рабочий лист Maple скопированы при помощи буфера обмена (в предыдущее моё сообщение этой темы).

NT2000, в видео “Create dll by Rad studio XE _ delphi” (опубликовано 23 августа 2012) использована директива stdcall. А как Вы потом подключаете функции библиотеки (dll) в Maple?

 Профиль  
                  
 
 Re: Использование (написанной в Delphi) DLL в Maple
Сообщение07.01.2015, 19:52 
Аватара пользователя


28/01/12
467
GAA в сообщении #957927 писал(а):
NT2000, в видео “Create dll by Rad studio XE _ delphi” (опубликовано 23 августа 2012) использована директива stdcall. А как Вы потом подключаете функции библиотеки (dll) в Maple?

Согласен - моя ссылка совсем не подлючений для Maple.
И само собой, что функции для формирования библиотеки DLL должны быть простыми (надеюсь он это понимает).
Я только предложил проверить вызов функций из приготовленной библиотеки DLL,
т.е. хотелось быть уверенным, что библиотека рабочая.

 Профиль  
                  
 
 Re: Использование (написанной в Delphi) DLL в Maple
Сообщение07.01.2015, 20:29 


04/01/15
7
GAA на почту я бы хотел скинуть скомпилированную вами динамическую библиотеку. Если все заработает, то я буду знать что проблема возникает при создании бибилиотеки. Если же не получится достучаться до функции буду знать что проблема в моем Maple.

NT2000 бибилиотека однозначно работоспособная. Проверял не раз. Она работает.

 Профиль  
                  
 
 Re: Использование (написанной в Delphi) DLL в Maple
Сообщение07.01.2015, 22:10 
Аватара пользователя


28/01/12
467

(to GAA)

Цитата:
Maple define_external - create a link to an external subroutine ...

Cdecl calling convention passes parameters on the stack and
pushes them from right to left in the parameter list. Each
parameter occupies a multiple of 4 bytes.

Sdtcall calling convention passes parameters on the stack and
pushes them from right to left in the parameter list. Each
parameter occupies a multiple of 4 bytes.

Что-то не разберу в чем различие между опциями cdecl и stdcall?
Если вас не затруднит, пожалуйста проверьте в вашем примере - вместо cdecl использовать stdcall.
Будет ли это работать в Maple?

 Профиль  
                  
 
 Re: Использование (написанной в Delphi) DLL в Maple
Сообщение08.01.2015, 10:33 
Заслуженный участник


12/07/07
4529
Den23, отправил dll, но, на мой взгляд, дело будет продвигаться быстрее, если Вы опишете конкретные результаты определения внешних функций в Maple (результаты выполнения предложений define_external).

Если при выполнении предложения
dmul:= define_external('mul', x::float[8], y::float[8], RETURN::float[8], LIB="Tst.dll"):
появляется сообщение “Error, external linking: error loading external library Tst.dll: Не найден указанный модуль”, то значит dll не лежит в текущей директории или директории, в которой ищутся dll для загрузки. Если так, то положите dll в подходящее место или укажите абсолютный путь к dll в формате "Disc:\\Directory\\Subdirectory\\tst.dll", например, "d:\\Maple\\tst.dll".

Если появляется сообщение “Error, external lookup of Mul: Не найдена указанная процедура”, то, скорее всего, оплошность в написании имени функции. Имя чувствительно к регистру (case-sensitive, заглавные и строчные буквы различаются), поэтому типичный промах — это использование заглавной вместо строчной или наоборот.

Если обе внешние функции определились без сообщений об ошибке, то в чём конкретно проблемы?

(to NT2000)

Из Object Pascal Language Guide [Borland Delphi5 for Windows 98, Windows 95, & Windows NT]
или
Delphi Language Guide [Delphi for Microsoft Win32 Delphi for the Microsoft .NET Framework. Borland]
или
встроенного Help Embarcadero XE4 [Procedures and Functions (Delphi)]
или
Embarcadero XE7:
“For all conventions except cdecl, the procedure or function removes parameters from the stack upon returning. With the cdecl convention, the caller removes parameters from the stack when the call returns.”

 Профиль  
                  
 
 Re: Использование (написанной в Delphi) DLL в Maple
Сообщение09.01.2015, 01:37 


04/01/15
7
Проблема решена. У меня был установлен 64 битный Maple. А бибилиотека генерировалась 32 битная. Всем большое спасибо за помощь.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group