小编Wel*_*iro的帖子

@Object vs Pointer(Object)有什么区别?

我正在测试以下代码:

type
  TPersonA = class
    public
      procedure Speak;virtual;
  end;

  TPersonB = class
    public
      procedure Speak;virtual;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var PersonA: TPersonA;
    PersonB : TPersonB;
begin
  PersonA := TPersonA.Create;
  PersonB := TPersonB.Create;

  PersonA := Pointer( PersonB );
  PersonA.Speak;
end;

procedure TPersonA.Speak;
begin
  ShowMessage('Hello');
end;


procedure TPersonB.Speak;
begin
  ShowMessage('Hello again');
end;

end.
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用方法作为虚函数运行此代码并将PersonB的指针传递给PersonA并调用Speak,则执行PersonB.Speak.

但是,如果我在两个方法中删除虚拟指令并再次运行,那么delphi将PersonA的方法作为静态执行,因为它的地址将被直接编译到它被调用的地方的代码中.

因此,当两个方法都声明为虚拟并且我更改了代码时:

PersonA:=指针(PersonB)==> …

delphi

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

无需等待即可调用控制台应用程序

我正在开发一个在隐藏模式下调用.net控制台应用程序的Delphi应用程序,但问题是:当我关闭我的delphi应用程序时,控制台应用程序也会关闭,即使使用ShellExecute而没有指定等待SingleObject.

我尝试了同样的Shell调用Windows Calc,所以现在即使我关闭我的应用程序,Calc仍然打开,这是我正在寻找的行为.

有人知道是否可以调用控制台应用程序并使其独立于父进程以及如何执行此操作,因此在主应用程序关闭时它不会关闭?

c# delphi

-1
推荐指数
1
解决办法
176
查看次数

标签 统计

delphi ×2

c# ×1