none
关于在.NET环境下调用Fotran编写的DLL和EXE的问题 RRS feed

  • 问题

  • 想请教是通过调用DLL容易易获得正在计算中得到的数据还是通过EXE容易获得?也许我的提发不太对,大概就是想用C#来写可视化的一些东西来展示Fotran数值计算中得到的数据
    2010年7月6日 2:37

答案

  • Fortran可以编写COM的。我用的是Intel Fortran 编译器,有一个COM Server的选项,子项包括 in process server(DLL)和out of process server(EXE) 。那就直接做一个COM组件吗?其实我都不懂DLL和COM组件有什么不同的特点,COM组件也没有做过,就是要定义一些接口吗?


    可以的话,你就按照那个做一个out of process server(EXE)(我上面回答把进程外,进程内说反了),主要就是实现一些COM接口,这些接口就是你

    需要外部程序来调用的方法。

    当你的out of process server(EXE)独立运行时,外部程序(包括脚本语言,比如vb script)都可以通过一个CLSID,或者CLSID绑定的组件名称连接到你的

    out of process server(EXE) 进程,并调用你公开的方法。

    作为新手,你可以先根据教程建一个简单的 out of process server(EXE) ,然后用regsvr32 注册你的 exe 程序,或者在 exe 启动时由程序内部注册。然后,运行你的out of process server(EXE),打开Excell 的 VBA 编辑器,编写一段访问的代码:

    dim obj as Object

    Set obj = CreateObject("你编写的组件名称") '连接到你的组件

    obj.Function() '调用你编写的组件的方法

    obj=Nothing '断开和你的组件的连接。

    当一切都成功后,你就可以把你最初的需求按照这种方式实现。

    • 已标记为答案 makinoyui 2010年7月9日 1:04
    2010年7月8日 8:53

全部回复

  • 当然是DLL比较容易,数据都在用一个进程里面。具体调用方法得看DLL怎么写的。



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年7月6日 19:05
    版主
  • 哦 谢谢你的回答 我一点一点弄吧 不会再过来问

    2010年7月8日 1:22
  • "获得正在计算中得到的数据",有两种理解,一种是:计算-获取;另一种是:获取;

    采用dll,是第一种方式,由调用方发起计算的指令,然后获取数据;

    采用exe,可以实现第二种方式,fotran编写的exe计算程序独立运行,调用方连接到该exe进程的com接口,并从中获取正在计算中得到的数据。

    2010年7月8日 1:51
  • 那我想按你说的用exe的方式,可是我是新手,我不知道如何开始,连接到该exe进程的com接口要怎么实现?你可以教教我吗?

    可以告诉我我需要看哪方面的知识才能做出来这样的效果吗?

    2010年7月8日 7:30
  • 我还真不知道如何用Fortran编写一个COM组件,但我知道用MFC/ATL可以很方便的实现。

    你需要了解进程间通讯的知识.

    我假设Fortran无法编写COM组件,那么可以做成一个DLL,然后用C++做一个进程内COM组件并包装Fortran的所有方法;

    这样,.net,或vb script等脚本语言都可以在运行时连接到该COM组件的实例,并调用它公开的方法,属性,甚至事件。

    2010年7月8日 8:26
  • Fortran可以编写COM的。我用的是Intel Fortran 编译器,有一个COM Server的选项,子项包括 in process server(DLL)和out of process server(EXE) 。那就直接做一个COM组件吗?其实我都不懂DLL和COM组件有什么不同的特点,COM组件也没有做过,就是要定义一些接口吗?
    2010年7月8日 8:38
  • Fortran可以编写COM的。我用的是Intel Fortran 编译器,有一个COM Server的选项,子项包括 in process server(DLL)和out of process server(EXE) 。那就直接做一个COM组件吗?其实我都不懂DLL和COM组件有什么不同的特点,COM组件也没有做过,就是要定义一些接口吗?


    可以的话,你就按照那个做一个out of process server(EXE)(我上面回答把进程外,进程内说反了),主要就是实现一些COM接口,这些接口就是你

    需要外部程序来调用的方法。

    当你的out of process server(EXE)独立运行时,外部程序(包括脚本语言,比如vb script)都可以通过一个CLSID,或者CLSID绑定的组件名称连接到你的

    out of process server(EXE) 进程,并调用你公开的方法。

    作为新手,你可以先根据教程建一个简单的 out of process server(EXE) ,然后用regsvr32 注册你的 exe 程序,或者在 exe 启动时由程序内部注册。然后,运行你的out of process server(EXE),打开Excell 的 VBA 编辑器,编写一段访问的代码:

    dim obj as Object

    Set obj = CreateObject("你编写的组件名称") '连接到你的组件

    obj.Function() '调用你编写的组件的方法

    obj=Nothing '断开和你的组件的连接。

    当一切都成功后,你就可以把你最初的需求按照这种方式实现。

    • 已标记为答案 makinoyui 2010年7月9日 1:04
    2010年7月8日 8:53
  • 虽然没听得不是很明白 还是谢谢你提供的方案!我去尝试看看

    2010年7月9日 1:04