У меня есть некоторый код VB6, который не может быть легко изменен и выглядит следующим образом:
Dim cCount as Long
Dim rCount as Long
Dim result()
Set mx = CreateObject("Component.Class")
Dim rtn = mx.GetList(rCount,cCount,result)
Метод, который он вызывает, в настоящее время является компонентом VB6, который мы перенесли в .NET с одной проблемой. Мы не уверены, какой тип ищет результат (), так как это вариантный тип. Мы пробовали объект, объект [], объект [] [], строку, строку [] и т. Д., Ни один из которых не сработал.
Вот пример:
public bool GetList(ref long rCount, ref long cCount, ref object result)
{
...
}
Я даже пытался установить третий параметр в VariantWrapper, так как он добавит ByRef по мере необходимости:
public bool GetList(ref long rCount, ref long cCount, VariantWrapper result)
{
...
}
Любые идеи, как я могу установить входящий результат, чтобы у меня не было необработанного исключения?
Я создал тестовый интерфейс (для COM), тестовый класс и тестовое приложение VB6, чтобы убедиться, что это проблема с Variant. Итак, это определено так:
.NET интерфейс:
[DispId(1)]
[ComVisible(true)]
string Test(ref object[] value);
VB 6 метод:
Private Sub Command1_Click()
Set mx = CreateObject("Component.Class")
Dim result()
MsgBox mx.Test(result)
End Sub
Та же проблема, что и описанная выше. В VB6 меня просто выгоняет. Если я компилирую и запускаю его, я получаю общее исключение .NET, и оно выбрасывает меня.