【问题标题】:.NET Interop Passing VB6 Form byRef.NET 互操作通过 VB6 表单 byRef
【发布时间】:2011-10-11 13:13:47
【问题描述】:

我正在尝试开发一个 .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 no such interface (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

【问题讨论】:

    标签: c# .net vb.net com-interop


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多