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]);

Удачи

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

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

Другие вопросы по тегам