为什么关掉我的程序,没道理呀?(200分)

  • 主题发起人 flagship
  • 开始时间
F

flagship

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟最近做论文时,用到了Delphi和Fortran,主要是用Delphi
做前台界面,用Fortran做后台数据处理及计算。主要用法是将
Fortran编译成DLL,然后直接用Delphi进行调用。在Delphi中我
是这样声明的:
proceduredo
WNCURVE( var PForce :do
uble;
var X :do
uble;
var Y :do
uble;
var Z :do
uble);
stdCall;
External 'f:/Fast/Fortran/Curve/Debug/Curve.Dll';
在Fortran中我是这样声明的
SUBROUTINEdo
WNCURVE(PFORCE,X,Y,Z)
!DEC$ ATTRIBUTES DLLEXPORT::DOWNCURVE
......
当我程序运行的时候,第一次运行该DLL程序完全正常,
但是当我第二次同样调用是,Delphi程序就被莫名其妙
地关掉,就想正常退出一样。我逐步的追踪该程序,
执行到该DLL完毕的时就发生了该现象。有那位大虾
遇到过这种情况,即Delphi在什么情况下能将程序这
样正常的“杀掉”,还望指教。事关小弟论文前途,
200大洋奉上
 
没用过fortran
 
忘了说一句,我的Delphi是用的4.0, Fortran是用的VF5.0
其实用VF生成的DLL和用VC生成的DLL是一样的。
 
关注次问题!
 
这个问题我也碰到过,这肯定是你的dll的毛病,一旦这个dll出了毛病,
在Delphi中怎么用try 都不行。
检查一下你的dll,看看有什么发生冲突的地方,
 
我在Fortran程序中用到了写数据文件的操作,一旦
我把所有关于文件操作的语句去掉,那么程序就正常了
无论多少次调用都没有关系。但我无法避免地要用到
文件操作时,那有该如何呢?
 
你的那些文件句柄是否正常打开和释放
 
我在调用一次DLL时,已将所有的文件Close掉了,
应该不会存在文件句柄冲突。
 
应该是动态连接出了问题了.
 
如果确保你的DLL没毛病,请用完一次DLL,就把Dll释放掉,下次用再装载进入试试看.
 
与ridolph的意见相同。
 
我已经试过n种办法,包括动态的调用DLL,而不是静态调用。
但是毛病依旧。后来我用vc来调用,结果和delphi里的是一样
的,所以我觉得可能还是自己的DLL除了毛病。只是我不知道什么
操作能使程序这样无声无息的被“杀掉”,但我保证我绝对没有
在DLL中使用正常退出的语句。
 
是不是dll里有terminate process或exit process之类的导致的???
建议你先用fortran调试, 没问题再用delphi来调.
 
flagship:
你在那,看我能不能帮你
 
感谢众位大虾的帮助和指点,此问题已经解决,其实毛病
很简单,就是读一个数据文件时出了错,找不到文件路径.
不过这种方式也太过霸道,任何错误信息都不给出,就将
我的主程序关掉.我已经在Delphi中调用该DLL之前,强
行指定了路径,则一切正常了.再次感谢各位的提醒.
BTW: 在Delphi中如何得到应用程序的路径.我现在是
   用Chdir(s)强行指定的绝对路径,但到了别的机器
   上显然是不行的.我的意思是比如我的Delphi主
   程序是test.exe,那么在与test.exe同级目录下
   建立一个data路径,用于存放各种数据文件,我
   想在delphi里首先的到test.exe的路径,然后
   就可以访问我的data路径下的数据文件了.

 
接受答案
 
extractfilepath(application.exename)
 
谢谢cAkk,不过不好意思,我的分刚刚分完了.
 
顶部