使用ActiveX控件保存表单时,从propertybag中删除不兼容的空格以解决错误

时间:2018-02-08 10:07:36

标签: vb6 activex incompatibility propertybag

我正在寻找一种方法让VB6编辑控件'在保存表格之前或期间的propertybag ..

我们正在使用一个activeX控件(AxisMediaControl),它似乎在其中使用Spaces的属性包名称,在尝试保存控件所在的表单时会抛出错误。

  

系统错误& H80070057(-2147024809)

这里描述了同样的问题: Source of a similar problem, but i don't have *.h files ()

但由于我们使用已编译的ActiveX,因此我无法编辑处理书写属性的方式,而且我们无法访问ActiveX的来源。

我设法创建了一个解决方法,在运行时加载控件,作为一个对象数组,但这样我就不会将它们编入索引来按索引捕获事件。

Dim Axis(1) As AxisMediaControl
For i% = 0 To 1
   Set Axis(i%) = Controls.Add("AxisMediaControl.AxisMediaControl.1", "AMC" & i%)
   Axis(i%).Tag = "CAM" + Format$(i%)
Next i%
'   Play Video

    With Axis(0)
        .Top = 600
        .Left = 240
        .Width = 9135
        .Height = 5535
        .Visible = True

        .StretchToFit = True
        .MaintainAspectRatio = True
        .EnableContextMenu = True

        .MediaFile = VideoFile$
        .play
    End With


'   Play Stream

    With Axis(1)
        .Top = 6840
        .Left = 240
        .Width = 9135
        .Height = 5535
        .Visible = True

        .StretchToFit = True
        .MaintainAspectRatio = True
        .EnableContextMenu = True

        .MediaFile = VideoStream$
        .play
    End With

ActiveX适用于较早版本的Visual Basic,如express 2005或vb.net,只能在vb6下运行。

有没有方法可以编辑'属性保存到propertybag的方式是什么?

我可以编辑dll或ocx以使其行为不同并拥有以前不兼容的ActiveX的最新版本吗?我尝试在dll文件上使用Resource Hacker,但是因为我的知识有限,但无济于事。

1 个答案:

答案 0 :(得分:1)

由于您提到控件适用于VB的dotnet版本,因此解决方法可能是在VB.NET中编写包装器,然后使用VB6中的包装器。这个包装器将提供一个标准的" ActiveX" (COM)接口和内部只调用原始控件。您只需要在包装器中公开最少的功能,只是为了尽量减少所需的工作量。

(注意 - 虽然这可能在技术上起作用,但它可能不是最好的整体解决方案。例如,如果可以升级到更现代的控制可能是更好的时间投入。)

编辑1:包装器会产生一些额外的开销,这是肯定的。但这种开销可能并不重要。例如,如果您只需要进行一些调用,则运行时效果可能无关紧要。 OTOH如果你必须在一些算法的最内层循环中调用这个东西(对于UI控件而言......但是......),这可能是一个更大的问题。

编辑2 :如果您的应用中没有任何dotnet组件,则可能不值得为此问题添加该依赖项。或者也许它会是,如果这真的是一个显示;但这可能是仔细思考的另一个考虑因素。