. net互操作传递VB6表单

本文关键字:VB6 表单 互操作 net | 更新日期: 2023-09-27 18:10:52

我正试图开发一个。net类,更新一个VB6表单及其控件与各种新的标题(它是在一个程序集,是COM可见)。

我传递一个VB6表单ByRef作为一个对象到。net类,然后更新标题等的形式如下:

Public Sub AddFormRefLegacy(ByRef objForm As Object)
    Try
        objForm.Caption = "some new caption"
        For Each ctl As Object In objForm.Controls
            Select Case TypeName(ctl)
                Case "Label"
                    ctl.caption = "some new caption"
                Case "Frame"
                    ctl.caption = "some new caption"
                Case "CommandButton", "PushButton"
                    ctl.caption = "some new caption"
                'etc etc

这在85%的情况下工作,但偶尔我得到一个运行时错误80131500没有这样的接口(E_NOINTERFACE)

我不确定这到底在哪里抛出错误,但有人能看到任何明显的错误吗?

编辑

问题似乎发生在这个部分:

Case "ITabStrip" 'MS Common Controls 6
    For i = 0 To ctl.Tabs.Count - 1 ' this sometimes throws the error!
        ctl.Tabs(i + 1).Caption = FindValue(objForm.Name, ctl.Name, i, ctl.Tabs(i + 1).Caption)
    Next

. net互操作传递VB6表单

一个可能的问题可能是VB6标签不是窗口控件,而是绘制在窗体的窗口上。另一个可能的问题是,如果你使用某些第三方控件,他们可能会使用所有者绘制技术,可能会做意想不到的事情。

我建议通过控制来缩小范围,看看他们中是否有人有问题。