2013-06-11 3 views
6

Я пытаюсь взять WinTable объекта и бросьте его собственный тип объекта как таковые:Собственный класс объектов из WinControl?

CustomControl control = (CustomControl) this.UIMap.UIMainWindow.UICustomControl.NativeElement; 

Тогда я хочу, чтобы обработать полученный CustomControl как я бы в исходном коде для моей программы, как control.DoAThing(), Я уже ссылался на .dll, содержащий класс CustomControl, но проблема в том, что .NativeElement; возвращает тип Object[], а не Object, как definition of the function говорит, что он должен.

Есть .NativeElement путь, или я не понимаю его цель?

UPDATE: Я проверил типы объектов в результате Object[] и первый один имеет тип System.__ComObject и второй является System.Int32, но я не уверен, что любой из них представляют ...

+0

Похоже, что вы не получаете управляемый объект, а только DLL, в котором находится элемент управления com, и целое число (предназначенное как указатель) для точки входа объекта. (что также связано с тем, почему для этого требуется полное доверие к непосредственному вызывающему абоненту) Моя догадка '.NativeElement' не должна делать то, что вы ожидаете от нее. Что такое 'CustomControl'? Вы сами пишете этот класс? –

+0

@TimothyGroote Нет, это сторонний элемент управления. Однако у меня есть доступ к исходному коду. –

+0

Я уверен, что поскольку Array наследует Object, этот Array aka Object [] является объектом и на самом деле не нарушает тип возврата – MPavlak

ответ

0

Было бы полезно, если бы вы разместили свой код для своих классов CustomControl и UICustomControl. Основываясь на моем смутном понимании вашей проблемы, может работать следующее: попробуйте и опубликуйте результаты.

object[] native = 
    this.UIMap.UIMainWindow.UICustomControl.NativeElement as object[]; 
if ((native[0] != null) && (native[0] is IAccessible)) { 
    IAccessible a = native[0] as IAccessible; 
    if (a is CustomControl) 
     CustomControl control = (CustomControl)a; 
} 
+0

. Какая у вас гарантия того, что первый элемент в массиве определен даже, не говоря уже о объект, который вы ищете? –

+0

Я уже пробовал это раньше, результатом было сообщение об ошибке, указывающее, что ссылка на объект не была установлена ​​aka 'IAccessible a = native [0] как IAccessible;' не работает. Я не думаю, что публикация исходного кода пользовательского контроля имеет значение в этом случае, теоретически моя проблема может быть применена к любому элементу управления, включая стандартные элементы управления Windows Forms. –

Смежные вопросы