コンポーネントベンダがVCLコンポーネントをアップグレードする領域で、コンポーネントをファイルにシリアル化して読み込む問題があります。たとえば、DelphiXでシリアライズされ、その後数年後にdelphiYで読み込まれるファイル。シリアライゼーション形式が変更されているかどうか、アップグレードする場合は、アップグレード時にコンポーネントでエラーが読み取られるのを防ぐために何ができるか。Delphiコンポーネントのシリアル化
答えて
公開されたプロパティをシリアル化するためのビルトインRTTIベースのシステムは、コンポーネントの変更に対して脆弱です。古い物件が新しい物件に保管されている限り、将来の進歩は管理可能です。私。プロパティインターフェースはそのままの状態にしておきますが、好きな場合は内容を破棄することができます。古いバージョンのロードで新しいバージョンの保存されたプロパティを開くことができず、それが問題になります。
XML形式のシリアル化を追加できるコンポーネント/ライブラリ(http://www.torry.net/quicksearchd.php?String=RTTI&Title=Yes)があります。これは、わからないコンテンツをスキップするのに役立ちます。
パブリッシュされたコンテンツをどのようにデザインするかについて注意する必要があります。現在のバージョンでは理解できないコンテンツを「無視して伝播」する方法を見つけるべきでしょう。これにより、より新しいアトリビュートを削除しようとせずに、新しいアトリビュートを保持しようとしている間に、新しいフォーマットでファイルを開いて変更することができます。
ベンダーがコンポーネントに機能を追加するため、フォーマットが大幅に変更されます。シリアライゼーションは、公開されたすべてのプロパティをループし、ストリームに保存します。それらを読み戻すと、ストリームから読み取られた各プロパティがコンポーネントに戻されます。プロパティがもう存在しない場合は、問題があります。基本的な例外処理以外に何もできないと思います。
互換性を保証する最良の方法は、独自のシリアル化を行うことです。
返信いただきありがとうございます。私はカスタムシリアル化を避け、各コンポーネントのシリアライゼーション手法を利用しようとしていましたが、新しいコンポーネントフォーマットへのアップグレードを「パッチする」方法がないため、カスタムシリアル化が唯一の方法だと思います。
旧リリースと廃止されたパラメータのサポートをまだ読んでいる限り、新しいリリースで古いストリームを読み込めるようにすることができます。問題は、旧式リリースでカスタムストリームを作成せずには行えない新しいストリームを読み込むことにあります。 –
- 1. Delphiコンポーネントのパブリックタイプ
- 2. Delphiコンポーネントのインストールエラー
- 3. ビジュアルデータベースデザインDelphi VCLコンポーネント?
- 4. Delphi Visual FMXコンポーネント
- 5. Delphi IRCコンポーネント
- 6. Delphiコンポーネントとスクリーンリーダー
- 7. Delphi DBase IIIコンポーネント
- 8. Delphi 2006のTPageControlコンポーネント
- 9. Delphiコンポーネントの保存
- 10. コンポーネント内のDelphiマウスホイールイベント
- 11. 逆シリアル化の逆シリアル化
- 12. シリアル化と逆シリアル化 - ソケットプログラミング
- 13. WPF BitmapImageシリアル化/逆シリアル化
- 14. Javascript Canvasシリアル化/逆シリアル化?
- 15. GeometryDrawingシリアル化/逆シリアル化
- 16. WCFシリアル化と逆シリアル化
- 17. Android HashMapシリアル化/逆シリアル化
- 18. Delphiのコンポーネントの配置ヒント
- 19. カレンダーのシリアル化の逆シリアル化
- 20. ZonedDateTimeのジャクソンのシリアル化/逆シリアル化
- 21. Delphi 64bit:コンポーネントの互換性?
- 22. Delphi/MySql:DB対応コンポーネントのタイムスタンプ
- 23. ロールオーバーメニュー用のDelphi XE2コンポーネント
- 24. Delphi XE2 TurboPowerコンポーネントのステータス
- 25. C++でのXMLシリアル化/逆シリアル化
- 26. .net DateTimeシリアル化逆シリアル化のバグ
- 27. MSMQ複合オブジェクトのシリアル化/逆シリアル化
- 28. オブジェクトxmlのシリアル化/逆シリアル化
- 29. シリアライゼーション:シリアル化されたオブジェクトのシリアル化可能でないコンポーネントが見つかりません
- 30. Delphiアプリケーションの設定をシリアル化する最善の方法は何ですか?
VCLストリーミングを使用すると、Classes.TReaderを直接使用してOnErrorイベントのハンドラを記述するときに、不足しているプロパティ(およびクラスやその他のエラーも)を処理できます。 Classesユニットに必要なすべてのコードが見つかりました。 最大の欠点は、あなたのクラス/クラスがTComponentから派生しなければならない、あるいは少なくともTPersistentから派生しなければならないということです。 –