在formcreate里下载dll 并加载相应的loadlibrary(dll),然后在程序退出时先 freelibrary(dll)然后调用 application.Terminate();
问题是 程序退出是总是出现raised exception class EAccessViolation with message 'Access
 violation ad address...'...请问各位这是什么毛病呢?

解决方案 »

  1.   

    我描述一下我的程序的逻辑(源码太多)
    首先我在一个过程中动态加载dll,然后将handle记录下来
    然后在另一个过程中调用dll中窗体form中的onCloseQuery过程后
    调用freelibrary单步执行到此没有问题
    直到运行到过程的
        Application.Run;
    end.
    执行完run之后报
    raised   exception   class   EAccessViolation   with   message   "Access 
      violation   ad   address... "... 如果我不调用freelibrary销毁dll不出错,不过这样就无法在程序里删除dll
      

  2.   

    有,用DLL时经常碰到,原因很多,一般都是资源没释放,你的DLL里有返回值吗?如果是返回字符串就要注意了
      

  3.   

    我今天也碰了相同的问题,请高手诊断
     1) if openDialog1.Execute then ....
     2) if colordialog1.execute then....1)不会发生异常,替换为2)发生异常。其余所有代码相同
    引发和楼主相同的异常,报的是dll的错,其实dll可能跟这个一点关系都没有
      

  4.   

    哪位帮忙看看呗,在application.terminate之前不可以调用freelibrary么?
    我在terminate之前调用了 dll的 closequery过程,和这个有影响么?
      

  5.   

    我的问题是LoadLibrary以及以后的执行没有什么问题,但是到了FreeLibrary就出问题了。怎么也找不到原因。
    网上有这些说法:
    1. 是因为传入了Application.Handler(看不懂的原因)
    2. 没有释放资源(这个就不好说了)
    3. 没有关闭数据库连接Connection 或 Query 等(后来手动把这些都关了还是报错)期待高手来解决
      

  6.   

    还用 MemProof 检查过内存泄漏的问题,也没有发现什么个子丑寅卯  郁闷