The Bodon Sky

my sky, my free, my .net , my wavelet
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于 接口 IPersistPropertyBag

Posted on 2005-08-23 14:09  bodon  阅读(1134)  评论(1)    收藏  举报
嵌入IE中得ActiveX控件,由IE创建。IE通过shdocvw.dll 对ActiveX控件进行查找名称为InitPropertyBagInitStream 的 Instance 的一个子项。若找到,它将根据注册表项的内容创建一个 IPropertyBagIStream(相应地),并将其传递给IPersistPropertyBag::LoadIPersistStream::Load 方法(相应地)。
这样ActiveX的控件很容易地自然地实现了和网页的序列化交互。
也正是由于IE和COleControl对对该接口的默认支持,因此在创建ActiveX控件的时候,程序员很容易的就可以解决属性在网页上的存储问题。

但在.net下,却大不相同。作为ActiveX控件的替代物的Winform控件,虽然可以嵌入IE,但其属性无法直接序列化到网页上。这就给我带来一个难题:我把Winform控件嵌入IE后,如何保持一些持久性数据呢?msdn(http://msdn.microsoft.com/msdnmag/issues/02/01/UserCtrl/default.aspx)上称UserControl也实现了这个接口,但微软并不将它提供给开发者使用。

??!!

微软为什么要这样做呢?为什么不对UserControl的属性序列化问题给出直接的方案呢?让我大惑不解,同时也给我带来极大麻烦。