回 帖 发 新 帖 刷新版面

主题:vb和fortran调用的问题

我没有用dll
我是先把fortran调试通过后,生成exe文件,用vb做界面。把界面输入的结果存在一个文件里,然后vb里面用shell调用fortran的exe文件,exe文件里面包含了从文件里读入。
但是,每次在vb调用exe时,都只是一闪而过,没有运行
如果单独点击exe运行,是可以运行通过的。
我不知道什么原因,请指教,急等

回复列表 (共8个回复)

沙发

Windows是分时系统,vb在调用exe后,并不停留在那条语句上,而是执行和处理下一条语句。
要想办法让vb在执行完exe之后再执行后面的语句,这是vb调用exe的关键技术。
这不是fortran的问题了,可能在vb区里能找到满意的解答。

板凳

有可能 是 路径 的 问题 ,
用 java调用fortran的exe文件 也会 发生 类似 的 情况:

直接 双击 exe文件 ,他可以 运行 ,但是 当被调用 之后 就 没有 结果 

在 fortran 里面 他可能 写输入 文件的 时候 用的 是相对 路径 ,所以 当 你把 input文件 和 exe文件放在 一个 file里时,双击 exe是 可以运行 的 

但是 当他 被其他 的 程序 调用 的 时候 ,可能 会出现 找不到 input文件的 情况 ,这个时候 ,就是一闪而过 。。。

可以 将 fortran中 的 相对路径 改为绝对 路径 

不如 在fortran中 :

1   WRITE (*, '("  Enter input file: ")')
!    READ (*,'(A)') file
    file = 'rts1.dat'

将 file = 'rts1.dat' 改为 file = 'C:\xxxx\rts1.dat'
问题就解决了 

这是 java调用 fortran时 可能会遇到 的 问题 ,我想 vb也应该 和这 个 类似 !

3 楼


在补充一点:

 文件输出路径也要改到 指定 的 文件 夹 里 ,不然 也会 没有 结果

4 楼

写如下语句,第一个参数为完整的程序路径和程序名,第二个参数把调用后的焦点赋给所调用的程序。
如:
Call Shell("c:\**.exe", 1)

5 楼

MTLX老师说的对,是vb的问题,已经解决
我在vb调用了windows等候机制,让程序等候exe程序运行完后,在执行后面的语句,也就是一个循环问题。谢谢各位的意见

6 楼

[quote]MTLX老师说的对,是vb的问题,已经解决
我在vb调用了windows等候机制,让程序等候exe程序运行完后,在执行后面的语句,也就是一个循环问题。谢谢各位的意见
[/quote]
正解!

7 楼

我也碰到了.我用了您所说的等待机制,编程如下:

Private Function ExecCmd(cmdline$)
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO
    
    'Initialize the STARTUPINFO structure:
    start.cb = Len(start)
    
    'Start the shelled application:
    ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, _
    NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)
    
    'Wait for the shelled application to finish:
    Do
        ReturnValue = WaitForSingleObject(proc.hProcess, 0) ' Not necessarily0, you can set a value like 100 as well
        DoEvents                    '在此处等待FOTRAN程序执行完
    Loop Until ReturnValue = 0

    Call GetExitCodeProcess(proc.hProcess, ReturnValue)
    Call CloseHandle(proc.hThread)
    Call CloseHandle(proc.hProcess)
    ExecCmd = ret&
End Function

现在我要运行"D:\Aermod\Aermet\EX01\stage1n2.exe"这个FOTRAN程序,则调用ExecCmd("D:\Aermod\Aermet\EX01\stage1n2.exe").但程序仍是一闪而过,并不真正执行. 
请您能帮我看一下原因吗?万分感谢ing!

 

8 楼

小弟也是超业余水准,临时派的活,遇到了同样的问题,请教您是怎么解决的,能不能把实现这块程的序给小弟分享一份?万分感谢!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册