Fortran Coder

楼主: lm_lxt

[绘图界面库] Fortran适合科学计算,界面交给Tcl/TK、PureBasic!

  [复制链接]

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-25 21:20:20 | 显示全部楼层
17.再来看看Tcl/TK的界面描述能力:
    ttk::button .a -text "lm_lxt"
    pack .a
    运行结果:

捕获.PNG

   好了,接下来只需要发挥你的想象。。。

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 17:58:35 | 显示全部楼层
18.最大的遗憾就是Tcl好像无法调用Fortran语言编写的dll文件。
   这个问题如能解决,Tcl和Fortran的搭配已经算很完美了。
   期待有人能够解决这个问题并加入讨论!

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 18:12:54 | 显示全部楼层
本帖最后由 lm_lxt 于 2014-1-26 18:19 编辑

19.有人会说C++、C#等语言都能调用Fortran编写的dll文件,而且其他功能丝毫不逊于Tcl。
   是的,其实这些语言功能都很强大,如果你掌握的不错的话;如果你只会Fortran,则Tcl这样的语言简单易用,很适合你!说到这里,顺便提一下另一个语言——PureBasic,她同样适合你。
20.PureBasic简单易用,不需要什么恼人的.net fra...,她的IDE很小(约30M!),很轻巧;适合游戏开发。
   同时调用Fortran编写的dll文件显得简单而直接,不信你看看:
[Visual Basic] 纯文本查看 复制代码
一、用purebasic调用CVF6.6编译的dll文件

1.用CVF6.6编译下面的fortran程序:

function ARRAYTEST(a,b)
  !DEC$ ATTRIBUTES DLLEXPORT:: ARRAYTEST

  REAL a,b,ARRAYTEST
  ARRAYTEST=a+b
END function ARRAYTEST

2.执行下面的purebasic程序得到结果

a.f = 1.0
b.f = 2.0
PrototypeC.f Arraytest(*a, *b)
If OpenLibrary(0, "dll.dll")
  Global Arraytest.Arraytest = GetFunction(0, "_ARRAYTEST@8")
  If Arraytest
    Debug Arraytest(@a, @b)
  EndIf
  CloseLibrary(0)
EndIf

二、用purebasic调用gfortran编译的dll文件

1.用gfortran编译下面的fortran程序:

function ARRAYTEST(a,b)
  !DEC$ ATTRIBUTES DLLEXPORT:: ARRAYTEST

  REAL a,b,ARRAYTEST
  ARRAYTEST=a+b
END function ARRAYTEST

2.执行下面的purebasic程序得到结果

a.f = 1.0
b.f = 2.0
PrototypeC.f Arraytest(*a, *b)
If OpenLibrary(0, "dll.dll")
  Global Arraytest.Arraytest = GetFunction(0, "arraytest_")
  If Arraytest
    Debug Arraytest(@a, @b)
  EndIf
  CloseLibrary(0)
EndIf

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 18:17:24 | 显示全部楼层
21.为了表现PureBasic的强大,下面贴出两张图片(声张声势):

捕获.PNG
     PureBasic的IDE(收费)

无标题.png
    PureBasic自带的例子

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2014-1-26 19:10:23 | 显示全部楼层
如果 TCL 可以调用其他语言的 DLL,没道理不能调用 Fortran 产生的。

如果 TCL 本身就是有跨平台的成分,那么语法里可能没有 DLL 相关的东西。

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 19:21:36 | 显示全部楼层
Tcl/TK可以和C/C++语言编写的dll进行良好沟通。但是对于Fortran,目前还不清楚有什么方法。

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2014-1-26 19:24:19 | 显示全部楼层
lm_lxt 发表于 2014-1-26 19:21
Tcl/TK可以和C/C++语言编写的dll进行良好沟通。但是对于Fortran,目前还不清楚有什么方法。 ...

DLL 做为一种操作系统的可执行文件来说,只有二进制语法,是没有语言特征的。

顶多在调用协定上有一些差别。不应该出现这种 C 的 DLL 可用,而 Fortran 的 DLL 不可以的情况。

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 19:31:07 | 显示全部楼层
fcode 发表于 2014-1-26 19:24
DLL 做为一种操作系统的可执行文件来说,只有二进制语法,是没有语言特征的。

顶多在调用协定上有一些差 ...

C的dll调用,我做过相应的例子。
至于Fortran的,有空再看。

1948

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1298 元
贡献
547 点

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

发表于 2014-1-26 19:41:34 | 显示全部楼层
lm_lxt 发表于 2014-1-26 19:31
C的dll调用,我做过相应的例子。
至于Fortran的,有空再看。

我觉得应该是不存在问题的。或者说,这些问题应该可以解决。
话说,假如你给我一个DLL,让我判断这是 C 编译出来的,还是 Fortran 编译出来的,我恐怕都不敢保证100%判断正确。

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

 楼主| 发表于 2014-1-26 19:45:36 | 显示全部楼层
fcode 发表于 2014-1-26 19:41
我觉得应该是不存在问题的。或者说,这些问题应该可以解决。
话说,假如你给我一个DLL,让我判断这是 C 编 ...

应该可以解决!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-3-29 17:45

Powered by Tencent X3.4

© 2013-2024 Tencent

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