Fortran Coder

楼主: lm_lxt
打印 上一主题 下一主题

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

  [复制链接]

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1372 元
贡献
581 点

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

22#
发表于 2014-1-27 17:42:48 | 只看该作者
OpenWindow 然后无限 WaitEvent,这就有点Win32 SDK编程的意思了。

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

21#
 楼主| 发表于 2014-1-27 16:48:32 | 只看该作者
22.为了表明PureBasic的能力,下面给出其描述窗口的一个例子:
[Visual Basic] 纯文本查看 复制代码
  #WINDOW_MAIN = 1
  #FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
  If OpenWindow(#WINDOW_MAIN, 0, 0, 300, 200, "Hello World", #FLAGS)
    Repeat
      Event.l = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
  End




   显然,两步走:打开窗口;事件循环!
   Fortran编程需要界面的,这也是个不错的选择。



98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

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

应该可以解决!

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1372 元
贡献
581 点

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

19#
发表于 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 点

管理勋章新人勋章

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

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

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

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1372 元
贡献
581 点

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

17#
发表于 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 点

管理勋章新人勋章

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

1967

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1372 元
贡献
581 点

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

15#
发表于 2014-1-26 19:10:23 | 只看该作者
如果 TCL 可以调用其他语言的 DLL,没道理不能调用 Fortran 产生的。

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

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

14#
 楼主| 发表于 2014-1-26 18:17:24 | 只看该作者
21.为了表现PureBasic的强大,下面贴出两张图片(声张声势):


     PureBasic的IDE(收费)


    PureBasic自带的例子

98

帖子

5

主题

3

精华

专家

F 币
426 元
贡献
275 点

管理勋章新人勋章

13#
 楼主| 发表于 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

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-6-2 06:23

Powered by Tencent X3.4

© 2013-2024 Tencent

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