2013-06-11 13 views
6

Próbuję wziąć WinTable obiektu i oddać go do swojej rodzimej typu obiektu, takich jak:Macierzysta klasa obiektów z WinControl?

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

Następnie chcę potraktować otrzymaną CustomControl jak bym w kodzie źródłowym jak control.DoAThing() mojego programu, Już odwoływałem się do pliku .dll zawierającego klasę CustomControl, ale problem polega na tym, że .NativeElement; zwraca typ Object[], a nie Object, taki jak definition of the function mówi, że powinien.

Czy droga jest .NativeElement czy nie rozumiem jej przeznaczenia?

UPDATE: Sprawdziłem rodzajów obiektów w otrzymanej Object[] a pierwszym z nich jest typu System.__ComObject i 2nd jest System.Int32 ale nie jestem pewien, co jeden z nich reprezentuje ...

+0

Wygląda na to, że nie otrzymujesz zarządzanego obiektu, ale tylko biblioteka DLL, w której znajduje się kontrolka com oraz liczba całkowita (przeznaczona jako wskaźnik) dla punktu wejścia obiektu. (co jest nawiasem mówiąc również dlaczego to wymaga pełnego zaufania dla bezpośredniego rozmówcy) Domyślam się, że '.NativeElement' nie powinien robić tego, czego się spodziewasz. Co to jest "CustomControl"? Czy sam napisałeś tę klasę? –

+0

@ TimothyGroote Nie, jest to kontrola zewnętrzna. Mam jednak dostęp do kodu źródłowego. –

+0

Jestem całkiem pewny, że ponieważ Array dziedziczy Obiekt, to Array aka Object [] jest Obiektem i tak naprawdę nie narusza typu zwrotu. – MPavlak

Odpowiedz

0

Byłoby pomocne, gdybyś opublikował swój kod dla klas CustomControl i UICustomControl. W oparciu o moje niejasne zrozumienie twojego problemu, mogą działać następujące: wypróbuj go i opublikuj wyniki.

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

Jaką masz gwarancję, że pierwszy element w tablicy jest nawet zdefiniowany, nie mówiąc już o obiekt, którego szukasz? –

+0

Próbowałem już tego wcześniej, wynikiem był komunikat o błędzie informujący, że odwołanie do obiektu nie było ustawione jako 'IAccessible a = native [0] as IAccessible;' nie działało. Nie sądzę, aby opublikowanie niestandardowego kodu źródłowego sterowania było w tym przypadku odpowiednie, teoretycznie mój problem mógł zostać zastosowany do dowolnej kontroli, w tym domyślnych formantów Windows Forms. –