6


2

誰もが、特にコンポーネントベンダーがVCLコンポーネントをアップグレードする分野で、コンポーネントをファイルにシリアライズして読み返すという問題に遭遇しています。 たとえば、DelphiXでシリアル化され、それから数年後にdelphiYで読み返されたファイルなどです。 シリアル化形式は変更されますか。変更された場合は、アップグレード時にコンポーネントの読み取りエラーを防ぐためにできることがあります。

3 Answer


3


公開プロパティをシリアル化するための組み込みのRTTIベースのシステムは、コンポーネントの変更に対して脆弱です。 古いプロパティが新しいオブジェクトに保存されている限り、先へ進むことは管理可能です。 すなわち プロパティのインタフェースはそのままにしますが、必要に応じて内容を破棄することができます。 後方に行くことはより悪いです - 新しいバージョンで保存されたプロパティは古いバージョンのロードで開くことができないので、それは問題になるでしょう。

コンポーネント/ libsがあります(http://www.torry.net/quicksearchd.php?String=RTTI

あなたはまだあなたがあなたの公開されたコンテンツをどのようにデザインするかについて注意する必要があり、おそらくあなたの現在のバージョンが理解していないコンテンツを「無視するが伝播する」方法を見つけるべきです。 これにより、新しい属性を削除するのではなく、新しい属性でファイルを開いて変更することができます。


0


ベンダーが自社のコンポーネントに機能を追加するため、フォーマットは大きく変わります。 シリアライゼーションは、公開されたすべてのプロパティを単純にループしてそれらをストリームに保存します。 それらが読み戻されると、ストリームから読み取られる各プロパティーはコンポーネントに戻されます。 プロパティがもう存在しない場合は、問題があります。 私はあなたがいくつかの基本的な例外処理以外にそれについて何かできることはないと思う。

互換性を保証するための最善の方法はあなた自身のシリアル化をすることです。


0


返信いただきありがとうございます。 私はカスタムシリアル化を避けて各コンポーネントシリアル化手法を利用しようとしていましたが、新しいコンポーネントフォーマットへのアップグレードを「パッチ」する方法がないため、カスタムシリアル化が唯一の方法であると思います。