【问题标题】:Delphi Streaming ProblemDelphi 流问题
【发布时间】:2011-06-12 16:31:18
【问题描述】:

我使用kbmMemTable 中的blob 字段来存储我从TComponent 开发的自定义组件,并使用TReader 的读写组件流方法来读写组件到 blob 字段。 kbmMemTable 中的数据最终存储在GpStructuredStorage 创建的结构化存储文件中。

这一直完美无缺,直到我将我的组件(连同kbmMemtable)移动到一个新应用程序并尝试让新应用程序读取 blob 字段。起初我收到组件命名错误(组件名称已存在),但后来当TReader 尝试读取我的组件的TPersistent 属性时,我开始收到访问冲突。

据我所知,关于从 gpStructuredStorage 文件中检索 kbmMemTable 数据的方式以及使用 TReader 从 blob 字段中读取回组件的方式,我没有进行任何更改。我没有对组件进行任何更改,而且我存储在同一个表的其他 blob 字段中的其他组件似乎没有任何问题(至少在读取它们时我没有收到任何错误背部)。

我对可能是什么问题感到恼火。任何帮助/建议将不胜感激。我正在使用 Delphi 2007。

【问题讨论】:

  • 如何格式化您的问题,使其不是文字墙?我不倾向于尝试以这种形式阅读它。
  • 尝试在两个应用程序中重现您的问题,方法是将您的 TPersistent 写入 .dfm 文件,然后重新读取该 .dfm 文件。然后将您的问题简化为可以重现的最简单的 TPersistent。然后使用示例代码重新提出您的问题。

标签: delphi streaming delphi-2007 vcl tpersistent


【解决方案1】:

另一个猜测。您的组件名称与其他/不同的名称相冲突。要解决此问题,请始终将您的单位置于其他渴望方的单位之后: 示例:

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

并确保注册您的组件

initialization
  RegisterClasses([TYourComponentClass]);

finalization
  UnRegisterClasses([TYourComponentClass]);

祝你好运

【讨论】:

  • 感谢您的帮助。我确实在声明我的组件的单元的初始化部分注册了我的组件 - 尽管我没有取消注册该类。我也会检查单位顺序。
【解决方案2】:

这只是一个猜测,但听起来新应用程序中的组件类定义与您正在流式传输的组件的定义不匹配。

【讨论】:

    【解决方案3】:

    我终于弄清楚了导致流式传输问题的原因 - 尽管我不确定为什么,所以也许有人可以解决这个问题。我决定检查问题是否是由我正在使用的一些新的 3rd 方组件引起的,你瞧,当我禁用一个皮肤组件(这将是我的新应用程序的改进!)时,一切正常它应该有。通过禁用我的意思是我没有从程序中删除它,我只是做了它,以便不再使用压缩皮肤来绘制窗口和控件。

    【讨论】:

      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多