.NET Interop传递VB6表格byRef

时间:2011-10-11 13:13:48

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

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

1 个答案:

答案 0 :(得分:0)

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

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