Я использую 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 не делаетвзять на себя ответственность за объект;Вы должны удалить объект самостоятельно и убедиться, что сообщение было удалено первым.
Как мне удалить сообщение?
Спасибо