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

  • 相关阅读:
    flyway
    xxl-job
    响应式布局
    position: fixed
    position: absolute
    position: relative
    GDB高级一点的命令
    坑爹的大页内存
    input8按键对照
    discuz插件应用原理分析
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3055390.html
Copyright © 2011-2022 走看看