VB.NET中调用FORTRAN程序的问题

bigrat51 2015-05-05 11:54:32
我编了一个程序,要实现的功能为:在VB.net中单击一个按钮,则调用一个FORTRAN过程。
该fortran程序会完成一个计算,自动将数据导出到WORD中。

但是在实际操作过程中,FORTRAN程序并未导出数据,求大神帮忙看一下是什么原因,代码如下:
Private Declare Function WaitForSingleObject Lib "kernel32 " (ByRef hHandle As Integer, ByRef dwMilliseconds As Integer) As Integer
Private Declare Function CloseHandle Lib "kernel32 " (ByVal hObject As Integer) As Integer
Private Declare Function OpenProcess Lib "kernel32" (ByRef dwDesiredAcess As Integer, ByRef bInheritHandle As Integer, ByRef dwProcessId As Integer) As Integer
Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim iTask As Integer, ret As Integer, pHandle As Integer
iTask = Shell("C:\Users\Taylor.F\Desktop\机力塔程序1\MCT21.exe", vbHide)
pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
ret = WaitForSingleObject(pHandle, INFINITE)
ret = CloseHandle(pHandle)
End Sub
...全文
385 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-05-06
  • 打赏
  • 举报
回复
到底是MCT21.exe不支持中文路径、还是当前路径必须是exe所在目录?试试
Environment.CurrentDirectory = "C:\Users\Taylor.F\Desktop\机力塔程序1\"
Shell("C:\Users\Taylor.F\Desktop\机力塔程序1\MCT21.exe", Microsoft.VisualBasic.AppWinStyle.Hide, True)

bigrat51 2015-05-06
  • 打赏
  • 举报
回复
解决了,竟然是把两个程序放在一个文件夹里,多谢!
Tiger_Zhao 2015-05-06
  • 打赏
  • 举报
回复
首先你得确认双击 MCT21.exe 是能够有结果出来的。
其次你得确认这个结果是 MCT21.exe 自己输出的,而不是它开了另外一个程序跑结果而自己马上结束了。
还有 MCT21.exe 是否要求有焦点?参数 Hide 改为 NormalFocus 试试。
最后就是权限问题了,关闭杀毒软件,VB.Net 程序的 exe 用管理员权限运行。
bigrat51 2015-05-06
  • 打赏
  • 举报
回复
fortran程序打开后要自动读取一些.dat文件里的数据,不知道是否跟这些有关
bigrat51 2015-05-06
  • 打赏
  • 举报
回复
我自己又用 System.Diagnostics.Process.Start("C:\Users\Taylor.F\Desktop\机力塔程序1\MCT21.exe") 尝试了一下 发现打开的程序只是一闪 不能真正实现打开FORTRAN程序 也就是没有停留在FORTRAN程序界面上,请问这是什么原因啊
bigrat51 2015-05-06
  • 打赏
  • 举报
回复
实在抱歉,由于自己在VB.NET实在是个小白,我按照您说的程序修改了一下,修改如下: 'Private Declare Function WaitForSingleObject Lib "kernel32 " (ByRef hHandle As Integer, ByRef dwMilliseconds As Integer) As Integer 'Private Declare Function CloseHandle Lib "kernel32 " (ByVal hObject As Integer) As Integer 'Private Declare Function OpenProcess Lib "kernel32" (ByRef dwDesiredAcess As Integer, ByRef bInheritHandle As Integer, ByRef dwProcessId As Integer) As Integer 'Private Const INFINITE = -1& 'Private Const SYNCHRONIZE = &H100 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'Dim iTask As Integer, ret As Integer, pHandle As Integer Shell("C:\Users\Taylor.F\Desktop\机力塔程序1\MCT21.exe", Microsoft.VisualBasic.AppWinStyle.Hide, True) 'pHandle = OpenProcess(SYNCHRONIZE, False, iTask) 'ret = WaitForSingleObject(pHandle, INFINITE) 'ret = CloseHandle(pHandle) End Sub 仍然没有得到计算结果,您是否能够把详细的这个shell在这个sub下的过程列一些,多谢多谢
Tiger_Zhao 2015-05-05
  • 打赏
  • 举报
回复
.Net 中的 Shell() 自带 wait 功能。
Shell("C:\Users\Taylor.F\Desktop\机力塔程序1\MCT21.exe", Microsoft.VisualBasic.AppWinStyle.Hide, True)

16,719

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧