Delphi Streaming Problem
Я использую поле BLOB в kbmMemTable
хранить пользовательский компонент, который я разработал из TComponent
и я использую методы потока чтения и записи компонента TReader
читать и записывать компонент в поле blob. Данные в kbmMemTable
в конечном итоге хранится в структурированном файле хранения, созданном GpStructuredStorage
,
Это работало безупречно, пока я не переместил свой компонент (вместе с kbmMemtable
) в новое приложение и попыталось, чтобы новое приложение прочитало поле большого двоичного объекта. Сначала я получал ошибку именования компонентов (имя компонента уже существует), но позже я начал получать нарушение прав доступа, когда TReader
пытается прочитать TPersistent
свойство моего компонента.
Насколько я знаю, я ничего не изменил в том, как я получаю kbmMemTable
данные из gpStructuredStorage
файл и способ, которым я прочитал компонент обратно из поля BLOB-объекта, используя TReader
, Я не внес никаких изменений в компонент и, похоже, у меня нет проблем с другими компонентами, которые я храню в других полях BLOB-объектов в той же таблице (по крайней мере, я не получаю никаких ошибок, когда они читаются назад).
Я недоволен тем, в чем может быть проблема. Любая помощь / предложение будет принята с благодарностью. Я использую Delphi 2007.
3 ответа
Еще одно предположение. Ваше имя компонента сопоставляется с другим / другим. Чтобы решить эту проблему, всегда делайте свои юниты после других жаждущих: пример:
from: SysUtils, YourUnitClass, Classes;
to: SysUtils, Classes, YourUnitClass;
и не забудьте зарегистрировать свой компонент
initialization
RegisterClasses([TYourComponentClass]);
finalization
UnRegisterClasses([TYourComponentClass]);
Удачи
Это всего лишь предположение, но похоже, что определение класса компонента в новом приложении не совпадает с определением компонента, который вы транслируете.
Я наконец выяснил, что вызвало проблему потоковой передачи - хотя я не уверен, почему, возможно, кто-то может пролить свет на эту проблему. Я решил проверить, может ли проблема быть вызвана некоторыми новыми сторонними компонентами, которые я использовал, и вот, когда я отключил компонент скининга (что должно было стать улучшением в моем новом приложении!), Все работало как это должно быть. Под отключением я подразумеваю, что я не удалил это из программы, я просто сделал это так, чтобы сжатые скины больше не использовались, чтобы нарисовать окна и элементы управления.