2

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

.NET 框架对使用 PropertyBags 有哪些支持?除了编写 COM 帮助程序 DLL 之外。属性包是仅 VB6 的构造还是它们是通用 OLE/COM 自动化框架的一部分?

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

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

4

3 回答 3

3

.NET 中对 PropertyBags 的支持为 0。对象的序列化替换了 PropertyBag 构造。

所以在我看来,你有两个选择。

  1. 咬紧牙关,编写 10 或 20 行的 Interop dll。
  2. 分析序列化属性包的内容,看看你是否可以解码它并找出图像和流的偏移量等。

我知道我要去哪一个。

于 2009-04-17T07:13:19.967 回答
1

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

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

于 2009-10-05T19:45:54.670 回答
1

值得指出的是,您可以通过在项目中引用 VB6 运行时 DLL 从 .NET 直接访问 VB6 PropertyBag。

添加对:( C:\WINDOWS\SysWow64\MSVBVM60.DLL 或可能在 System32 文件夹中)的引用

然后您将在对象浏览器中看到 PropertyBag:

在此处输入图像描述

请注意,此 VB6 类不具有读取/写入磁盘文件、字节数组等的功能。它仅管理内存数据 (AFAIK)。因此,仅此一项并不能解决如何以 PropertyBag 存储的任何格式保存/加载数据的问题。

于 2019-01-07T12:56:48.963 回答