zoukankan      html  css  js  c++  java
  • 相当无语的一个bug。又是关于DLL中接口的释放

    procedure TFormMain.btn1Click(Sender: TObject);
    begin
      //加载dll
      TReportConsoleLibWrapper.checkInitialize;
      try
        //创建一个接口,由DLL创建
        with TReportConsoleLibWrapper.createReportConsole(createDefaultOperator) do
        try
          //调用接口方法,显示窗体
          ShowConsole;
        finally
          //调用接口方法,释放窗体
          FreeConsole;
        end;
      finally
        //释放dll
        TReportConsoleLibWrapper.checkFinalization;
      end;
    end;

    以上代码点击按钮运行完后出错

    稍微修改一下

    procedure TFormMain.btn1Click(Sender: TObject);
    begin
      //加载dll
      TReportConsoleLibWrapper.checkInitialize;
      try
        //创建一个接口,由DLL创建
        lvReportConsole:=TReportConsoleLibWrapper.createReportConsole(createDefaultOperator);
        with lvReportConsole do
        try
          //调用接口方法,显示窗体
          ShowConsole;
        finally
          //调用接口方法,释放窗体
          FreeConsole;
        end;
    
        //设置nil,会调用接口对象的.relase方法 必须在释放dll之前释放
        //否则函数执行完成后释放领的接口对象时会出现异常.因为整个dll都释放了
        lvReportConsole := nil;
      finally
        //释放dll
        TReportConsoleLibWrapper.checkFinalization;
      end;
    end;

    仔细下来想想确实还是自己的问题。明明知道,还犯下了这样的错误,还我调了4个小时。头都晕了

  • 相关阅读:
    201521123028 《Java程序设计》第5周学习总结
    Markdown格式
    201521123028《Java程序设计》第4周学习总结
    201521123028 《Java程序设计》第3周学习总结
    Spring07 JDBC
    Spring06 Aop
    Mystring05 配置文件之间的关系
    Mybatais 13 二级缓存
    Mybatais 14 注释的配置
    Mybatais 12 一级缓存
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3055390.html
Copyright © 2011-2022 走看看