C# .NET互操作传递VB6表单byRef
我正在尝试开发一个.NET类,该类用各种新标题更新VB6窗体及其控件(它位于COM可见的程序集中) 我将VB6表单ByRef作为对象传递给.NET类,然后更新表单上的标题等,如下所示:C# .NET互操作传递VB6表单byRef,c#,.net,vb.net,com-interop,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.Control
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
一个可能的问题是VB6标签不是窗口控件,而是在窗体的窗口上绘制的。另一个可能的问题是,如果您使用的是某些第三方控件,那么它们很可能使用的是所有者绘制技术,这可能会产生意想不到的效果 我建议通过控制来缩小范围,看看他们是否有问题