Все, я пытаюсь получить доступ к .NET dll, зарегистрированному как COM-объект, с PowerBuilder 10. У меня постоянно возникают проблемы, когда объекты .NET возвращают списки.
Я создал очень простой класс для доказательства концепции и для лучшего объяснения того, с чем я сталкиваюсь. Смотрите ниже:
.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) не работает, сводит меня с ума.
Спасибо.