• 相当无语的一个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个小时。头都晕了

  • 相关阅读:
    HTML与css语法笔记
    HTML标记含义
    HTML-入门篇day01
    计算器
    九宫格
    5.28第十三周
    5.21 不用交得作业及答案
    5.22 上交作业
    5.15作业
    5.7作业
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3055390.html
Copyright © 2020-2023  润新知