在.NET中转换VB6 PropertyBag

时间:2009-02-20 14:22:40

标签: .net vb.net vb6 propertybag

对于某些文件操作,我们使用VB6的PropertyBag对象通过Content属性将各种项目转换为bytearray。然后,我们将bytearray保存为二进制文件的一部分。稍后当我们加载文件时,我们读回文件,读入bytearray并使用propertybag的readproperty重新构建项目。我们经常使用它来存储客户徽标等图像。

.NET框架对使用PropertyBags有什么支持? Othan比写一个COM助手DLL。 Property包是VB6唯一的构造还是它们是一般OLE / COM自动化框架的一部分?

我所希望的是避免编写VB6辅助DLL并直接访问(通过声明)所需的COM函数。我不是要复制功能,而是将存储在bytearray中的对象转换为它们的.NET等价物。

注意:我对在.NET中实现属性包的功能不感兴趣。只能读取已保存的VB6 Property Bag的字节。

3 个答案:

答案 0 :(得分:2)

.NET中对PropertyBags有0支持。对象的Serailisation取代了PropertyBag构造。

所以我看到你有两个选择。

  1. 发出子弹并写下10或20行Interop dll。
  2. 分析序列化属性包的内容,看看是否可以对其进行解码并找出图像和流等的偏移量。
  3. 我知道我要前往哪一个。

答案 1 :(得分:1)

您可以在他的old VB6 sample page上查看Edanmo的加载并将图片保存到字节数组示例。它非常简单,可用于“序列化”任何实现IPersistStream接口的对象,例如ADODB.Recordset。 VB6的PropertyBag使用IPersistStream作为对象,可能实现“自定义”VT_Xxx变体类型序列化。

顺便说一下,Edanmo的代码片段允许您将通过复制/粘贴存储的图像读取到Access网格的图像列。

答案 2 :(得分:0)

It is worth pointing out that you can directly access the VB6 PropertyBag from .NET by referencing the VB6 runtime DLL in your project.

Add a reference to: C:\WINDOWS\SysWow64\MSVBVM60.DLL (or might by in System32 folder)

and you will then see PropertyBag in the object browser:

enter image description here

Note that this VB6 class does not have functionality for reading/writing to disk files, byte arrays, etc. It only manages the in-memory data (AFAIK). So this alone does not solve the issue of how to save/load data in whatever format the PropertyBag was stored in.