如何利用D6调用Fortran编译的EXE文件呢?(30分)

  • 主题发起人 主题发起人 Ignorant
  • 开始时间 开始时间
I

Ignorant

Unregistered / Unconfirmed
GUEST, unregistred user!
我尝试利用winexec和shellexecute来调用,但都出现了同样的一个问题。<br>就是dos窗口一闪而过,没有进行任何计算就退出了。<br>这是为什么呢?<br>我的fortran执行文件是利用Power Station Fortran 4来编译的。<br>
 
原来是工作目录问题,要利用<br>shellexecute把工作目录设为exe程序所在目录,不然程序搜索不到文件就马上退出dos<br>幸好自己发现了,可以保住仅有的小小分数。
 
说实话,你的分既然出来了,就已经被扣掉了!<br>建议你下次先看看有没有类似地贴子,然后再提问!
 
啊,是啊,原来分数给出就没有啦。<br>那只有把这分数给你啦。<br>要不你再帮我解决一个问题,好吗?分数不够还可以加啊。<br>我现在用D6调用了Fortran编译好的一个exe程序。<br>但是因为Fortran程序的执行时间比较长,一般在几分钟以上,如果我把dos窗口显示出来就肯定可以看到计算进度啦,但是我不想让dos窗口弹出,用了sw_hide,不过我又想在D6上弄上一条进度条,用一个什么办法可以实现呢?Fortran的源代码我都有的。<br>我试过用 'ExeFileName.exe &gt;c:/abc.txt'来执行我的Fortran程序,不知为何总是得不到abc.txt文件,没有办法进行其他操作 。<br>您可以帮忙想一个好办法出来吗?<br>谢谢!
 
首先对你的聪明表示祝贺。其次,使用 ExeFileName.exe &gt;c:/abc.txt 倒确实可以得到输<br>出文件,遗憾的是,必须等到 ExeFileName.exe 退出才行,而退出了就是结束了,你得到<br>了这个文件也没用了。也许,你可以采取 CreatePipe 的做法,把输出送到你的 D6 程序里<br>来,请试着查查大富翁论坛的数据库,搜索关键字“CreatePipe”,找到的范例可能需要针<br>对你自己的需求做点修改,例如:<br>如何将DOS的标准输出转倒Memo中<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=638463<br><br>将DOS的的返回信息及时显示在...<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=224596<br><br>等等。
 
小雨哥,很谢谢您的建议,我也感觉你的建议非常好。<br>我自己也调试过,但是这个function也只能在dos程序运行结束时候才能读入全部dos窗口的信息。<br>用程序里面的一句注释就是:// get all output until dos app finishes<br>但是我的程序是一次执行好几分钟,中间过程我是希望能得到什么返回信息能使我在D6里面创建一个进度条之类的东西监测着程序的进展,但如果这个function的话,只能在程序结束得到一个String对我的编程也是没有什么帮助的,不知我这种情况是否完全没有可能实现呢?<br>再次感谢您给的建议!<br><br>
 
是啊,所以我在上面说“可能需要针对你自己的需求做点修改”。pipe 的输出确实是不断<br>的、连贯的,在普通程序里,当我们需要中途输出的时候,我们会捕捉 #13 这个标志,它<br>是回车的标志,一般表示新的内容的开始。所以我们可以在这个标志出现时,强制 pipe 直<br>接输出一个行。您的程序当然要结合您的程序实际来进行类似的修改。
 
经过自己的一番努力,终于实现了所需要的功能,很感谢您,小雨哥!
 
后退
顶部