可能是退出的时候有很多对象没有置空,有很多特别古怪的警告窗。
如何做到正常而且安全退出程序,应该注意些什么问题。

解决方案 »

  1.   

    把代码帖上来
    如果每个窗体都unload了,那么它的对象也就被置空了
      

  2.   

    程序里面应用很多自己写的dll ocx,代码嘛,就不方便贴了
      

  3.   

    在每个form中的每一个过程中,可能用到一些对象,如果这些对象是定义为局部变量的(就是在form最上面定义的),你在退出这个form时最好把这些变量清空(在form_unload中写),尤其是object类的,set nothing.以确保置空,这样可能会好一些,
      

  4.   

    在设计这类软件时,就应该注意对不再使用的对象set nothing,虽然VB会自动回收内存,但在某些情况下并不可靠。
    对于以经存在这些问题的工程,你可以再为之编写一个退出函数,对所有的窗体和全局变量、对象进行清空:
    sub ExitApp()
       unLoad frm1
       unload frm....
       set Obj1=nothing
       set obj....=nothing
       end
    end sub
      

  5.   

    ?特别是些硬件资源的调用是否释放
    ----------------
    楼上的说的是,因为调用了一个扫描仪的dll
      

  6.   

    ketao_78 (树欲静而风不止) 题的问题太经典了,我就碰到过好几次
    总结下来:
    (1)、例如Connection,rs的对象用完就Set Nothing
    (2)、总程序退出时,END,强制全部退出
         因为有时,进程没退出,搞不清楚怎么回事
    以上是我体会。
      

  7.   

    在每个窗体的unload事件中写上:set 窗体名=nothing
      

  8.   

    只知道两个语句,
    1.set object = nothing
    2.unload object
      

  9.   

    昨天才寫的﹕1﹐如果是多窗體﹐請檢查是否每一個都已經unload掉﹐你可以寫個循環讓每個     窗體都unload.
          2﹐如果用到數據庫連接﹐請關閉的時候用set conn=nothing進行完全關閉。
          3﹐用到某控件﹐特別是外部控件﹐要看到底是怎么關。如果是于硬件連接的部分﹐沒有關的話﹐會沖突很麻煩。
     其實必須要明白﹐窗體關閉的時候一定會經過unload,最后經過Terminate事件。如果你把unload的Cancel設置false﹐請一定在關閉的時候設置回true。否則它永遠都沒有關閉。
      最后是個人遇見的一次﹐因為習慣在unload下全部關閉﹐用end﹐但是事實會出現非法操作﹐所有真正end掉程序應該寫在Terminate事件中。個人來講﹐最近在做個和通訊有關的程序﹐用的一個外部控件﹐沒有任何資料﹐是另一家以前的同事寫的﹐如果生成exe文件﹐不會出現問題﹐但是如果我在編輯過程中﹐很突然關VB時候﹐就會出現錯誤提示﹐很麻煩﹐因為連接N多不同數據庫﹐還有.....問題﹐所以也是在查找中﹐因為某本省就弱啊﹐好象找寫控件的那個人問問他該怎么做轔
      

  10.   

    对阿,就是用end会出错,但是不用,程序实际上是假退出,程序还在在进程中
      

  11.   

    其实是这样,我们在作扫描程序的时候调用了一个kscan的控件,用于isis扫描,封装在一个dll中 ,外面的shell程序调用该dll作扫描,程序退出的时候发现很多稀奇古怪的错误,包括该控件有关的错误,关于该控件的错误,我认为是扫描设备正在与该控件通信,忽然中断程序,会引起该控件的释放错误,至于其他错误,我现在也弄不清楚。
      

  12.   


    先Unload
       Set XX=nothing再在每个form的unload事件里加个END我就不信退不出去!
      

  13.   

    养成良好的习惯,用完的就nothing,要不就搞dll
      

  14.   

    for each frm in vb.forms
      if not frm is me then unload frm
    next
    unload me
      

  15.   

    dim frm as form
    dim obj as object
    for each frm in vb.forms
      for each obj im frm.comtrols
          set obj=nothing
      next obj
      unload frm
    next frm
      

  16.   

    现在我用了api强行结束该应用程序的进程
      

  17.   

    new 过的东东一定要记得 set nothing
      

  18.   

    我现在用teminate process 好像没有什么很大的问题了,不知道各位有什么别的好办法,以及我的办法的缺点。谢谢
      

  19.   

    上面大家都说了很多了,将建立的对象nothing掉。
    但是大家好像都没注意过一点,一个模块级的不定数组是不会自动被清除掉的,往往因为这个原因,整个模块也无法从内存中清除,会导致内存重复占用。模块unload的时候一定要记住erase掉模块级de不定数组