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

Вниз

Работа Delphi с библиотеками других языков   Найти похожие ветки 

 
Afonya   (2004-02-04 13:34) [0]

Добрый день, Мастаки!
Помогите пожалуйста разобраться в одном вопросе. Или посоветуйте свой вариант решения проблемы.
У меня есть библиотека (*.lib), написанная на фортране (под win32).
Как эту библиотеку можно подключить к проекту, чтобы была возможность вызова процедур и функций из нее?


 
MBo ©   (2004-02-04 13:53) [1]

никак. Сделай на фортране DLL


 
Afonya   (2004-02-04 14:04) [2]

Спасибо, сейчас попробую...


 
Afonya   (2004-02-06 09:57) [3]

MBo, сделал следующую DLL-ку:

REAL*8 FUNCTION SUB (N)
!MS$ATTRIBUTES DLLEXPORT :: SUB
SUB = 10.0*N
RETURN
END FUNCTION


Но при вызове её из своего Делфи-приложения, происходит ошибка - создается исключит. ситуация. Вот текст подключения DLL-ки (она лежит в том же каталоге, где и сама программка)

procedure TForm1.Button1Click(Sender: TObject);
type
//_Array = array of double;
TShow_MY_FUNCTION = function( N : integer ) : real;
var
//My_Array : _Array;
N : integer;
R : real;
hLib : THandle;
Show_MY_FUNCTION : TShow_MY_FUNCTION;
begin
N := 10;
hLib := LoadLibrary("MY_FUNCTION.DLL");
if hLib >= 32 then
begin
@Show_MY_FUNCTION := GetProcAddress(hLib,"SUB");
if @Show_MY_FUNCTION <> nil
then R := Show_MY_FUNCTION( N );
end
else
ShowMessage("Отсутствует библиотека MY_FUNCTION.DLL");

FreeLibrary(hLib);
end;


Может хоть кто-нибудь подскажет, где я ошибаюсь?


 
jack128 ©   (2004-02-06 10:00) [4]

Соглашения о передаче параметров в фортране какие? Сомневаюсь, что register, как в Дельфи


 
Afonya   (2004-02-06 10:04) [5]

Я в FORTRANe не силен пока, может кто знает, где "собака зарыта"?
Может кто наступал на эти грабли?


 
MBo ©   (2004-02-06 10:12) [6]

TShow_MY_FUNCTION = function( N : integer ) : double; stdcall
или другое соглашение о вызове, указанное (или подразумеваемое) при создании DLL. jack128 уже указал, что в Delphi по умолчанию используется соглашение register, обычно несовместимое с другими языками.


 
afonya   (2004-02-06 17:22) [7]

С передачей простых (целочисленных и вещественных) типов данных разобрался. А вот как теперь с массивами разобраться. Как передовать в dll-ку хотябы статический массив из Delphi?


 
MBo ©   (2004-02-06 17:31) [8]

со статическим массивом особых проблем не должно быть - в функции фортрана, если не ошибаюсь, всегда он передается по ссылке, т.е. указатель на него, в Delphi - var.



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-53474
ke_ke
2004-02-06 12:55
2004.02.17
Куда делись компоненты?


4-53812
Kinder
2003-12-08 22:16
2004.02.17
нажимаем кнопку Windows


3-53364
VictorT
2004-01-27 19:55
2004.02.17
Избавление от селекта внутри делете


1-53641
h0use
2004-02-06 15:46
2004.02.17
Как в компоненет создавать about?


4-53805
K@rt
2003-12-13 16:16
2004.02.17
Запись в файл