-
Дмитрий Белькевич (20.05.11 09:30) [0]Как лучше передать запись через COM, учитывая, что набор полей может меняться со временем, а интерфейс метода, передающего запись, менять не желательно.
TArchiveSettings = record
AMsgBalloon: boolean;
AMsgEmail: boolean;
AMsgNetSend: boolean;
AMsgPrinter: boolean;
AMsgNetworkFile: boolean;
AMsgPrinterName: string;
AMsgEmailSMTPServer: string;
AMsgEmailPort: integer;
AMsgEmailUserName: string;
AMsgEmailPassword: string;
AMsgEmailFromAddress: string;
AMsgEmailToAddress: string;
AMsgEmailSubject: string;
AMsgEmailNeedAuthentication: boolean;
AMsgEmailAuthenticationType: integer;
AMsgFileFileName: string;
AMsgFileOverrideFile: boolean;
AMsgNetSendFromUser: string;
AMsgNetSendToComputer: string;
RetryCount: integer;
TimeDelay: integer;
AcceptUnknownSOPClass: boolean;
ServerPort: integer;
DBPathFormat: integer;
AutoStoreOperMode: integer;
AutoStoreOperTime: integer;
AutoStoreLongMode: integer;
AutoStoreLongTime: integer;
HL7Port: integer;
HL7Host: string;
HL7WaitForACK: boolean;
HL7Enabled: boolean;
HL7TestMessage: string;
AETitlePrg: string;
end;
С контролем версий записи буду разбираться отдельно. -
Дмитрий Белькевич (20.05.11 09:31) [1]Да, Delphi 2010, если это важно.
-
int64 © (20.05.11 14:41) [2]Если структура данных будет меняться, то зачем транспортному уровню что-то знать об этой структуре?
Передавай в каком-нить XML. -
_Юрий (21.05.11 19:37) [3]Добавить к записи методы сохранения в стрим\чтения из стрима.
Сохранить в стрим, стрим передать как вариант - массив байт. Вначале стрима писать версию, чтобы можно было безопасно грузитьcя. -
DiamondShark © (01.06.11 12:05) [4]Проще всего -- сейфэррэй вариантов.
Кошерный вариант -- в виде COM-объекта контейнера.
Заодно проблема контроля версий решается набором реализуемых интерфейсов. -
Дмитрий Белькевич (06.06.11 17:05) [5]Сделал с помощью TJvSimpleXML:
ParamContainer: TJvSimpleXML;
Form1.ParamContainer.LoadFromString(Form1.ArchiveGUI1.GetSettingsToGUI);
with Form1.ParamContainer.Root.Items do
begin
SpTBXCheckBox5.Checked := BoolValue('AMsgBalloon');
SpTBXCheckBox6.Checked := BoolValue('AMsgEmail');
SpTBXCheckBox7.Checked := BoolValue('AMsgNetSend');
SpTBXCheckBox8.Checked := BoolValue('AMsgPrinter');
SpTBXCheckBox9.Checked := BoolValue('AMsgNetworkFile');
......... -
Дмитрий Белькевич (06.06.11 17:10) [6]Циклическая вложенность полей-массивов в записях при таком подходе достаточно просто получилась. У меня так не только TArchiveSettings передаётся, а еще 3 записи.