我正在使用Delphi 10.2,为移动设备编写代码,但在Windows上进行测试。尝试通过以下代码删除消息(使用Free或DisposeOf)时出现“无效的指针操作”错误:
procedure TViewmodelAuthentication.HandleSignUp;
var
lTarget: TFrameSetupRecord;
lMsg: TMessage;
begin
lTarget.Frame := ftSignUp;
lTarget.Direction := TTabTransitionDirection.Normal;
lMsg := TGoToMessage<TFrameSetupRecord>.Create(lTarget);
TMessageManager.DefaultManager.SendMessage(self, lMsg);
lMsg.DisposeOf; //Error: Invalid pointer operation
end;
我注意到在此Embarcadero代码示例中未删除该消息:
procedure TForm1.Button1Click(Sender: TObject);
var
MessageManager: TMessageManager;
Message: TMessage;
begin
MessageManager := TMessageManager.DefaultManager;
Message := TMessage<UnicodeString>.Create(Edit1.Text);
MessageManager.SendMessage(Sender, Message, True);
end;
但是TMessage上的文档似乎说应该删除该消息:
但是,当您创建一个以对象为值的TMessage时,TMessage 不拥有对象的所有权;您必须删除对象 自己,并确保首先删除了邮件。
我应该如何删除邮件?
谢谢
答案 0 :(得分:-1)
您不删除TMessage。它是一条记录,而不是对象或指针。编译器和整数或字节以相同的方式对待TMessage,后者是根据需要移动并复制的内存块。 它不是地址或参考。文档告诉您的是,如果TMessage包含对另一个单独对象的引用,则您有责任确保将其释放。