我正在测试以下代码:
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)==> …
我正在开发一个在隐藏模式下调用.net控制台应用程序的Delphi应用程序,但问题是:当我关闭我的delphi应用程序时,控制台应用程序也会关闭,即使使用ShellExecute而没有指定等待SingleObject.
我尝试了同样的Shell调用Windows Calc,所以现在即使我关闭我的应用程序,Calc仍然打开,这是我正在寻找的行为.
有人知道是否可以调用控制台应用程序并使其独立于父进程以及如何执行此操作,因此在主应用程序关闭时它不会关闭?