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

  • 相关阅读:
    百度网盘破解
    openstack2 kvm
    Openstack1 云计算与虚拟化概念
    Rsync + Sersync 实现数据增量同步
    Ansible 详解2-Playbook使用
    Ansible 详解
    Python mysql sql基本操作
    COBBLER无人值守安装
    ELK 环境搭建4-Kafka + zookeeper
    此坑待填 离散化思想和凸包 UVA
  • 原文地址:https://www.cnblogs.com/DKSoft/p/3055390.html
Copyright © 2011-2022 走看看