2013-06-11 13 views
6

che sto cercando di prendere un oggetto WinTable e gettato al suo tipo di oggetto nativo in quanto tale:Classe oggetto nativa da WinControl?

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

poi voglio trattare la risultante CustomControl come avrei fatto nel codice sorgente per il mio programma come control.DoAThing(), Ho già fatto riferimento al file .dll contenente la classe CustomControl ma il problema è che .NativeElement; restituisce un tipo Object[] piuttosto che uno Object come lo dice lo definition of the function.

.NativeElement è la strada da percorrere o sto fraintendendo il suo scopo?

UPDATE: Ho controllato il tipo degli oggetti nella risultante Object[] e il primo è di tipo System.__ComObject e il 2 ° è System.Int32 ma non sono sicuro di quello che uno di questi rappresentano ...

+0

Sembra che tu non stai ricevendo l'oggetto gestito, ma solo la DLL del controllo com risiede in e un intero (inteso come un puntatore) per il punto di ingresso dell'oggetto. (che per inciso è anche il motivo per cui fare questo richiede piena fiducia per il chiamante immediato) La mia ipotesi è che ".NativeElement" non dovrebbe fare ciò che ci si aspetta. Che cos'è 'CustomControl'? Hai scritto tu stesso quella lezione? –

+0

@TimothyGroote No, è un controllo di terze parti. Tuttavia, ho accesso al codice sorgente. –

+0

Sono abbastanza sicuro dal momento che Array eredita Object, che Array aka Object [] è un Object e in realtà non violi il tipo restituito – MPavlak

risposta

0

Sarebbe utile se hai pubblicato il tuo codice per le tue classi CustomControl e UICustomControl. Sulla base della mia vaga comprensione del tuo problema, il seguente potrebbe funzionare: provalo e pubblica i risultati.

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

Che garanzia hai che il primo elemento nell'array sia definito, figuriamoci l'oggetto che stai cercando? –

+0

L'ho già provato prima, il risultato era un messaggio di errore che diceva che un riferimento a un oggetto non era impostato come "IAccessible a = native [0] come IAccessible;" non funzionava. Non penso che la pubblicazione del codice sorgente del controllo personalizzato sia rilevante in questo caso, in teoria il mio problema potrebbe essere applicato a qualsiasi controllo, inclusi i controlli predefiniti di Windows Form. –

Problemi correlati