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个小时。头都晕了

  • 相关阅读:
    配置gem5-gpu模拟环境
    如何避免并发情况下的重复提交
    避免重复执行
    java线程池
    java动态代理
    Java 静态代理
    Java 静态代理和动态代理
    Spring的事务传播性
    mybatis配置(Configuration.xml)详解
    mybati之parameterType传递多个参数
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3055390.html
Copyright © 2011-2022 走看看