Delphi Streaming Problem - PullRequest
       19

Delphi Streaming Problem

1 голос
/ 20 января 2011

Я использую поле BLOB-объекта в kbmMemTable для хранения пользовательского компонента, который я разработал из TComponent, и использую методы потока чтения и записи TReader для чтения и записи компонента в поле BLOB-объектов. Данные в kbmMemTable в конечном итоге сохраняются в структурированном файле хранения, созданном GpStructuredStorage.

Это работало безупречно, пока я не переместил свой компонент (вместе с kbmMemtable) в новое приложение и не попытался заставить новое приложение прочитать поле blob. Сначала я получал ошибку именования компонентов (имя компонента уже существует), но позже я начал получать нарушение прав доступа, когда TReader пытается прочитать свойство TPersistent моего компонента.

Насколько я знаю, я ничего не изменил в отношении способа извлечения данных kbmMemTable из файла gpStructuredStorage и способа чтения компонента обратно из поля большого двоичного объекта с помощью TReader. Я не внес никаких изменений в компонент и, похоже, у меня нет проблем с другими компонентами, которые я храню в других полях BLOB-объектов в той же таблице (по крайней мере, я не получаю никаких ошибок, когда они читаются назад).

Я недоволен, в чем может быть проблема. Любая помощь / предложение будет принята с благодарностью. Я использую Delphi 2007.

Ответы [ 3 ]

1 голос
/ 21 января 2011

Еще одно предположение.Ваше имя компонента сопоставляется с другим / другим.Чтобы решить эту проблему, всегда делайте свои юниты после других жаждущих: пример:

from: SysUtils, YourUnitClass, Classes;
to: SysUtils, Classes, YourUnitClass;

и обязательно регистрируйте свой компонент

initialization
  RegisterClasses([TYourComponentClass]);

finalization
  UnRegisterClasses([TYourComponentClass]);

Gook luck

0 голосов
/ 22 января 2011

Я наконец понял, что вызвало проблему потоковой передачи - хотя я не уверен, почему, возможно, кто-то может пролить свет на эту проблему.Я решил проверить, может ли проблема быть вызвана некоторыми новыми сторонними компонентами, которые я использовал, и вот, когда я отключил компонент скининга (что должно было стать улучшением в моем новом приложении!), Все работало какэто должно быть.Под отключением я подразумеваю, что я не удалил это из программы, я просто сделал это так, чтобы сжатые скины больше не использовались, чтобы нарисовать окна и элементы управления.

0 голосов
/ 21 января 2011

Это всего лишь предположение, но похоже, что определение класса компонента в новом приложении не совпадает с определением компонента, который вы транслируете.

...