我正在为我正在处理的系统模拟第三方VB.net应用程序 - 真正的后端(我无法访问)使用WebBrowser控件和一些接口javascript (我有权访问)。
大多数情况都有效,但我在添加javascript中引用的集合时遇到了一些麻烦。在javascript文件中存在这样的各种引用:
var insSetCount = booking.InsertionSets.Count;
for (var nInsSet = 1; nInsSet <= insSetCount; nInsSet++) {
var insSet = booking.InsertionSets(nInsSet);
}
此对象看起来是某种类型的集合...我已经读过COM不支持通用列表,所以我尝试添加Public InsertionSets As ArrayList
。但是,我在上面的javascript的第三行得到以下错误:
TypeError: Wrong number of arguments or invalid property assignment
然后我尝试使用显式默认属性赋值滚动我自己的集合:
<ComVisible(True)>
Public Class InsertionSetCollection
Inherits CollectionBase
Public Sub New()
MyBase.New()
End Sub
Public Sub Add(ByVal obj As InsertionSet)
List.Add(obj)
End Sub
Default Public ReadOnly Property Item(ByVal index As Integer) As InsertionSet
Get
Return CType(List.Item(index - 1), InsertionSet)
End Get
End Property
End Class
但是这种方法与我使用ArrayList时的结果相同。
我现在通过在javascript中用InsertionSets(i)
取代InsertionSets.Item(i)
的所有引用来解决这个问题 - 这似乎有效,但当然涉及修改生产代码。< / p>
任何人都可以给我任何关于我应该使用哪种集合类型的指针,或者如何有效地使用COM Interop的默认属性?
我在这里提取了我的VB.net代码:http://pastebin.com/wx7ZR1ME,如果遗漏了重要内容,请告诉我。
答案 0 :(得分:1)
以下内容适用于C#,请注意[DispId(0)]
。希望您可以将其转换为VB.NET:
[ComVisible(True)]
public class ScritingArray {
ArrayList _items = new ArrayList();
[DispId(0)]
public object this[int index]
{
get { return _items[index]; }
set { _items[index] = value; }
}
}