gpt4 book ai didi

c++ - VB 和 C++ ActiveX 控件以不同的方式保存其信息,我如何实现 C++ ActiveX 控件来替换 VB ActiveX?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:39 37 4
gpt4 key购买 nike

背景

有一个由 VB 创建的旧 ActiveX 控件。我将此 ActiveX 控件添加到我的 Excel 工作簿并设置了一些属性。这些属性是在保存书籍时保存的。具体来说,它们在 VB 代码中使用 PropertyBag 保存在 UserControl_WriteProperties 函数中。所以这些属性一直保留在工作簿中直到现在。

我的任务

我必须使用 C++ 创建一个新的 ActiveX 控件,以便向后兼容旧控件。我需要在旧 Excel 工作簿中的 ActiveX 控件中保留所有信息。因此,我将 IPersistPropertyBag 实现到我的 ActiveX 控件。

我的期望是,当我打开我的旧 Excel 工作簿时,必须通过 PropertyBag 正确检索所有信息。

问题

我发现我的 Excel 工作簿中保存的信息是流格式。我可以对我的新 ActiveX 控件实现 IPersistStreamInit,但我不了解我的 Excel 工作簿中持久存在的 Stream 中的格式。因此,我无法检索保存在我的 Excel 工作簿中的信息。

我想知道为什么在VB代码中通过Propertybag保存的信息却以Stream格式保存。

问题

在这种情况下,有没有办法让所有的信息都持久化在ActiveX控件中?我已经找了两天了,但我找不到办法。

最佳答案

属性包被保存到流中,仅此而已。

我希望您的 C++ 控件实现 IPersistStream,因此 Excel 正在尝试使用它。我建议您首先尝试从 C++ 控件中删除 IPersistStream、IPersistStreamInit 和 IPersistStorage,只留下 IPersistPropertyBag。

关于c++ - VB 和 C++ ActiveX 控件以不同的方式保存其信息,我如何实现 C++ ActiveX 控件来替换 VB ActiveX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13969479/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com