Delphi流问题

Delphi流问题,delphi,streaming,delphi-2007,vcl,tpersistent,Delphi,Streaming,Delphi 2007,Vcl,Tpersistent,我在kbmmetable中使用blob字段来存储从TComponent开发的自定义组件,并使用TReader的读写组件流方法将组件读写到blob字段。kbmMemTable中的数据最终存储在由GpStructuredStorage创建的结构化存储文件中 这是完美的,直到我将我的组件(以及kbmMemtable)移动到一个新应用程序,并试图让新应用程序读取blob字段。起初我收到一个组件命名错误(组件名称已经存在),但后来当TReader尝试读取组件的TPersistent属性时,我开始收到访问冲

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

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

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


我对可能出现的问题感到恼火。如有任何帮助/建议,将不胜感激。我使用的是Delphi 2007。

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

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

另一种猜测。您的组件名称与其他/不同的组件名称冲突。要解决此问题,请始终使您的单位位于其他单位之后: 例如:

from: SysUtils, YourUnitClass, Classes;
to: SysUtils, Classes, YourUnitClass;
并确保注册您的组件

initialization
  RegisterClasses([TYourComponentClass]);

finalization
  UnRegisterClasses([TYourComponentClass]);

运气真好

另一种猜测。您的组件名称与其他/不同的组件名称冲突。要解决此问题,请始终使您的单位位于其他单位之后: 例如:

from: SysUtils, YourUnitClass, Classes;
to: SysUtils, Classes, YourUnitClass;
并确保注册您的组件

initialization
  RegisterClasses([TYourComponentClass]);

finalization
  UnRegisterClasses([TYourComponentClass]);

运气真好

我终于找到了导致流媒体问题的原因——尽管我不知道为什么,也许有人可以解释一下这个问题。我决定检查问题是否是由我正在使用的一些新的第三方组件引起的。瞧,当我禁用了一个蒙皮组件(这将是我的新应用程序的一个改进!)时,一切都正常工作。通过禁用我的意思是我没有从程序中删除它,我只是这样做,压缩的皮肤不再用于绘制窗口和控件

我终于找到了导致流媒体问题的原因——尽管我不知道为什么,也许有人可以解释一下这个问题。我决定检查问题是否是由我正在使用的一些新的第三方组件引起的。瞧,当我禁用了一个蒙皮组件(这将是我的新应用程序的一个改进!)时,一切都正常工作。通过禁用我的意思是我没有从程序中删除它,我只是这样做,压缩的皮肤不再用于绘制窗口和控件

如何格式化你的问题,使它不是一个文本墙?我不想尝试以这种形式阅读它。请尝试在两个应用程序中复制您的问题,方法是将您的TPersistent写入.dfm文件,然后将该.dfm文件读回。然后把你的问题减少到最简单的持续性问题上。然后用示例代码重新问你的问题。如何格式化你的问题,使它不是一堵文本墙?我不想尝试以这种形式阅读它。请尝试在两个应用程序中复制您的问题,方法是将您的TPersistent写入.dfm文件,然后将该.dfm文件读回。然后把你的问题减少到最简单的持续性问题上。然后用示例代码重新询问您的问题。谢谢您的帮助。我确实在声明我的组件的单元的初始化部分注册了我的组件,尽管我没有注销该类。我也会检查单位订单。谢谢你的帮助。我确实在声明我的组件的单元的初始化部分注册了我的组件,尽管我没有注销该类。我还将检查设备订单。