小编tmj*_*ac2的帖子

如何检查对象引用是否仍然有效?

我有一个问题,我试图确定对象的引用是否有效.但它似乎正在回归奇怪的结果.

procedure TForm1.Button1Click(Sender: TObject);
  var form1 : TForm;
      ref2 : TControl;
begin
  form1 := TForm.Create(nil);
  form1.Name := 'CustomForm';
  form1.Parent := self; //Main Form

  form1.Show;

  ref2 := form1;
  showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
  freeandnil(form1);
  showmessage(ref2.ClassName+' - '+ref2.Name+' - '+BoolToStr(ref2.visible,true));
end;
Run Code Online (Sandbox Code Playgroud)

第一个showmessage返回 - "TForm - CustomForm - True"(就像我期望的那样).

第二个showmessage回归 - "TForm - - False".我实际上希望某种访问违规,然后我可以陷阱并知道该引用无效.

在我的应用程序中,我需要在创建它们时编译随机TForm后代的列表,然后稍后检查它们是否已经消失(或者不可见).不幸的是,这是一个基于插件的系统,所以我可以改变所有这些表格来发布"我已完成消息".

像这样的代码是否可以安全使用(假设我实际上正在检查访问违规)?有没有人有任何想法发生了什么.

谢谢

delphi memory-management delphi-2009

4
推荐指数
2
解决办法
4978
查看次数

终结部分没有在dll中运行

我正在尝试在Delphi XE2中创建一个DLL,它将弹出一个带有TWebBrowser组件的表单.调用WebBrowser.Navigate2方法时,应用程序结束时不会调用单元(或任何单元)的终结部分.如果未调用Navigate2,则终结部分就好了.

dll正在从C++(VS 2010 MFC控制台)调用,并通过导入库链接.

还有其他方法可以做到这一点,但我想重用我们已编写的代码.

有谁知道发生了什么事?

谢谢.

这是一个简单的问题重演:

library DisplayPatientAlertsIntf;
exports DisplayPatientAlertsA name 'DisplayPatientAlertsA@4';

begin
end.

unit uAlertWindow;

interface

uses
  Winapi.ActiveX,
  Forms,
  SHDocVw,
  Graphics, Controls;

function DisplayPatientAlertsA(PatientID : PAnsiChar): Integer; export; stdcall;

implementation

var ts : TStringList;

function DisplayPatientAlertsA(PatientID : PAnsiChar): Integer; export; stdcall;
  var Form1 : TForm;
      WebBrowser1 : TWebBrowser;
      DidCoInit : Boolean;
begin
  DidCoInit := Succeeded(CoInitialize(nil));
  try
    Form1 := TForm.Create(nil);
    try
      WebBrowser1 := TWebBrowser.Create(nil);
      try
        WebBrowser1.ParentWindow := Form1.Handle;
        WebBrowser1.Align := alClient;
        WebBrowser1.Navigate2('file://c:\temp.html');
        Form1.ShowModal;
      finally
        WebBrowser1.Free;
      end;
    finally …
Run Code Online (Sandbox Code Playgroud)

delphi twebbrowser

0
推荐指数
1
解决办法
3672
查看次数