Все, я пытаюсь получить доступ к .NET dll, зарегистрированному как COM-объект с помощью PowerBuilder 10. Я постоянно сталкиваюсь с проблемами, когда объекты .NET возвращают списки.
Я создал очень простой класс для проверки концепции и лучшего объяснения того, с чем я сталкиваюсь. Увидеть ниже:
.СЕТЬ:
public class ListsArrays
{
public int[] GetArray()
{
int[] array = new int[3];
array[0] = 1;
array[1] = 10;
array[2] = 100;
return array;
}
public List<int> GetList()
{
List<int> list = new List<int>();
list.Add(3);
list.Add(33);
list.Add(333);
return list;
}
public int[] GetListArray()
{
List<int> list = new List<int>();
list.Add(3);
list.Add(33);
list.Add(333);
return list.ToArray();
}
}
PowerBuilder:
Integer ls_array[]
Integer obj_return, ID, netVal
String FullName
OleObject lo_dotnetobject
OleObject lo_Value
lo_Value = Create OleObject
lo_dotnetobject = Create OleObject
obj_return = lo_dotnetobject.ConnectToNewObject("XXX.ListsArrays")
//This is the tricky part
ls_array = lo_dotnetobject.GetArray() // WORKS (1)
ls_array = lo_dotnetobject.GetList().ToArray() // DOES NOT WORK (2)
lo_dotnetobject.GetList().CopyTo(ls_array) // DOES NOT WORK (3)
ls_array = lo_dotnetobject.GetListArray() // WORKS (4)
Для каждой части, которая «НЕ РАБОТАЕТ», я получаю следующее сообщение об ошибке:
«Функция / событие без возвращаемого значения, используемое в выражении в строке»
Очевидно, я мог бы просто обернуть мою сборку .NET и вернуть массив для каждого списка, но я хотел бы иметь возможность обрабатывать списки на стороне PowerBuilder, не оборачивая .NET. У кого-нибудь есть идеи? Тот факт, что (4) работает и (2) не работает, сводит меня с ума.
Спасибо.