2015-01-20 1 views
1

Я имитирую стороннее приложение VB.net для системы, над которой я работаю, - реального конца (что у меня нет доступ к) использует элемент управления WebBrowser и некоторый интерфейс javascript (к которому у меня есть доступ).«недопустимое присвоение свойств» при использовании коллекции с помощью элемента управления WebBrowser и ObjectForScripting

Большая часть работы работает, но у меня возникли проблемы с добавлением коллекций, на которые ссылается 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.

Я работаю над проблемой на данный момент, заменив все ссылки на InsertionSets(i) на InsertionSets.Item(i) в javascript - это, похоже, работает, но, конечно, включает в себя модификацию производственного кода.

Может ли кто-нибудь указать мне какие-либо указатели на тип сбора, который я должен использовать здесь, или, альтернативно, как эффективно использовать свойство по умолчанию с помощью COM Interop?

Я извлек код VB.net здесь: http://pastebin.com/wx7ZR1ME, пожалуйста, дайте мне знать, если что-то важное отсутствует.

+0

Хм, то ArrayList должно было сработать, хотя, что индексация явно неправильно, это начинается с 0. ошибка в VB.NET недостающее 'По умолчанию ', чтобы сделать его свойством по умолчанию. –

ответ

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; } 
    } 
} 
+1

Спасибо за предложение, я попробую. Похоже, что атрибут, который мне нужен для VB.NET, может быть «DispIdAttribute» - https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dispidattribute(v=vs.71).aspx – seanhodges