Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Вниз

Как поженить фортрановскую dll( с параметрами) и Delphi? ...... 


MIg   (2002-03-29 15:33) [0]

Раньше мне писаль на фортране ДЛЛ-ки с процедурой без параметров. Я их подключал без проблем.
Допустим:
-----
procedure mapr;stdcall;
...
...
...
procedure mapr;external "c:\Kommod\DLL\Mapdll" name "mapr";
-----
Вот...
А сейчас дали процедурку:
Subr midplan(Tb,npl,ep,r);
Где
Tb(6) - real*8
npl,Ep - integer
на выходе
z(3) - real*8;
Попытался я ее так вызвать:
-----
type TDigits = array[1..8] of Real;//это я из Хелпа взял, иначе массив не получается описать
TDigits1 = array[1..3] of Real;
procedure midplan(tb: TDigits;npl:integer;ep:integer;var r:TDigits1);stdcall;
-------

Проект компиллируется, но при запуске выдает такое окошко:
"Точка входа в процедуру _FIIfexp_не найдена в библиотеке DLL DFORRT.dll"
И все. Ничего не работает.

Подскажите, пожалуйста.

-----



PVOzerski   (2002-03-29 16:00) [1]

Из общих соображений:
1) в Fortran передача параметров по крайней мере раньше была только по ссылке (аналог Паскального (var Param...));
2) А почему Stdcall? Может, лучше Pascal (в Delphi по умолчанию
не Pascal, а Register, так что Pascal надо указать явно);
3) А что же всё-таки такое _FIIfexp_? Кто эту процедуру пытается
вызывать из этой DFORRT.dll?



MIg   (2002-03-29 16:30) [2]

///2) А почему Stdcall?
Честно говоря, я другого способа не знаю(этот в книжке нашел и начал пользоваться).
//Может, лучше Pascal
А как?

//3) А что же всё-таки такое _FIIfexp_? Кто эту процедуру пытается вызывать из этой DFORRT.dll?
Если бы я знал.......Явно никто к ней не обращается.
Может в описании параметров я из Real*8 неправильно в Делфи перевел?...Или еще чего нибудь



PVOzerski   (2002-03-29 16:43) [3]

>//Может, лучше Pascal
>А как?
А прямо вместо слова Stdcall написать слово Pascal.

>А сделайте дамп Вашей Fortran-овской dll и посмотрите, что
и откуда она импортирует. Хотя, конечно, может быть и динамическая загрузка. Окошко-то с сообщением кто делает - система или dll (сорри, у меня английсая NT4, так что как выглядят подобные сообщения на русских Виндах, мне не посмотреть.



Ник   (2002-03-29 19:27) [4]

Вот пример работающего кода.
DLL фортрановская.
Используются указатели.

unit truddllpas;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
md1 = array[1..1000]of double;
int1d=array[1..50]of longint;
md2 = array[1..1000,1..20]of double;
int2d=array[1..1000,1..20]of longint;
Procedure Clir(m,n:longint;Pv,PNpi,Pjc,Pfc,Psw,Pdmin,Phc:Pointer);
stdcall;external"truddll.dll"index 1;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
var
fc:md1;
Npi:int1d;
v : md2;
sw : int2d;
m,n,jc : longint;
Dmin,Hc :double;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j :integer; Fs:TextFile;st:string;
begin
try
AssignFile(Fs,"updat");Reset(Fs);
readln(Fs,m,n);
for j:=1 to n do
for i:=1 to m do read(Fs,v[j,i]);
CloseFile(Fs);
Npi[1]:=12; Npi[2]:=34567;
Clir(m,n,@v,@Npi,@jc,@fc,@sw,@Dmin,@Hc);
AssignFile(Fs,"fbs");Rewrite(Fs);
writeln(Fs,jc);
for i:=1 to jc do writeln(Fs,fc[i]);
CloseFile(Fs);

str(jc,st);Edit1.Text:=st;
str(Dmin:10:3,st);Edit2.Text:=st;
str(Hc:10:3,st);Edit3.Text:=st;
except
exit;end;
end;

end.



MIg   (2002-04-01 14:59) [5]

Получилось, большое спасибо!!!




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.014 c
3-46239           JibSkeart             2002-03-23 11:56  2002.04.15  
Поднятие темы с (MSSQL 6.5 на MSSQL 7.0 )


4-46542           slym                  2002-02-12 17:23  2002.04.15  
Как из массива байтов сделать битмап?


1-46301           AvcRUSSIAN            2002-04-03 14:57  2002.04.15  
ScrollBARs для TTreeView


14-46485          BJValentine           2002-03-06 14:35  2002.04.15  
Музыка


1-46333           hooky-mars            2002-04-03 21:44  2002.04.15  
Масивы не понятно какого вида