2

我正在寻找一种在保存表单之前或期间让 VB6 编辑控件的属性包的方法。

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

系统错误 &H80070057 (-2147024809)

此处描述了相同的问题: Source of a similar question, 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 下出现。

有没有办法“编辑”属性保存到属性包的方式?

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

4

1 回答 1

1

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

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


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

编辑 2:如果您的应用程序中还没有任何 dotnet 组件,则可能不值得为此问题添加该依赖项。或者,如果这真的是一场精彩的表演,也许会是这样;但这可能是需要仔细考虑的额外考虑因素。

于 2018-02-12T12:34:03.487 回答