Fortran Coder

查看: 7203|回复: 2
打印 上一主题 下一主题

[混编] Delphi 调用 Fortran 编译的 DLL

[复制链接]

1

帖子

1

主题

0

精华

新人

F 币
9 元
贡献
3 点
跳转到指定楼层
楼主
发表于 2016-12-19 19:49:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

搞了很久才搞清楚如何二者混编,先上代码

Delphi中的:
[Delphi] 纯文本查看 复制代码
01type
02  Tvar=function(a:integer;b:array of real):real;stdcall;
03 
04procedure TForm1.Button1Click(Sender: TObject);
05var shuzu:TFarProc;
06    onehandle:THandle;
07    myf:Tvar;
08    sz:array of Real;
09    i:Integer;
10begin
11   SetLength(sz,StrToInt(Edit2.Text));
12   for I := Low(sz) to High(sz) do
13     begin
14       sz[i]:=Random(100);
15       Memo1.Lines.Add(FloatToStr(sz[i]));
16     end;
17 
18   onehandle:=LoadLibrary('D:\TestDll.dll');
19   try
20     if onehandle <> 0 then
21     begin
22       shuzu:=GetProcAddress(onehandle,'Sortandfindmax');
23     end;
24 
25     if shuzu <> nil then
26     begin
27       myf:=tvar(shuzu);
28       Edit1.Text:=FloatToStr(myf(Length(sz),sz));
29       for I := Low(sz) to High(sz) do
30         Memo2.Lines.Add(FloatToStr(sz[i]));
31     end;
32   finally
33     FreeLibrary(onehandle);
34   end;
35end;

Fortran中的
[Fortran] 纯文本查看 复制代码
01FUNCTION SORTANDFINDMAX(LENGTH,ARRAY)
02!------------------------------如果将变量的顺序调换为 ARRAY,LENGTH,那么就出现传输数组时数组长度少一位
03!DEC$ ATTRIBUTES DLLEXPORT::SORTANDFINDMAX
04!DEC$ ATTRIBUTES STDCALL,ALIAS:'Sortandfindmax'::SORTANDFINDMAX
05DOUBLE PRECISION ::ARRAY(LENGTH)
06INTEGER::I,J
07DOUBLE PRECISION::SORTANDFINDMAX,TEMP
08SORTANDFINDMAX=ARRAY(1)
09DO I=1,LENGTH-1
10    DO J=I+1,LENGTH
11        IF(ARRAY(I).GT.ARRAY(J)) THEN
12            TEMP=ARRAY(I)
13            ARRAY(I)=ARRAY(J)
14            ARRAY(J)=TEMP                                      不讨论算法效率
15            SORTANDFINDMAX=ARRAY(J)
16            END IF
17    END DO
18    END DO
19END

哪位给指点一下,为什么需要将数组放在最后呢

无标题.png (8.82 KB, 下载次数: 336)

无标题.png
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2016-12-20 08:35:46 | 只看该作者
我手上没有 Delphi,你能不能把 数组在前,数组在后,分别编译成2个exe,然后压缩以后传上来?

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

板凳
发表于 2016-12-20 14:48:04 | 只看该作者
[Fortran] 纯文本查看 复制代码
1implicit none


[Fortran] 纯文本查看 复制代码
1implicit a-h,o-z

都没有,编译器凭啥认定length就是整数?!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-5-3 21:39

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表