2013-06-11 15 views
6

Ich versuche, ein WinTable Objekt zu nehmen und es zu seinem nativen Objekttyp als solche Stimmen:Native Objektklasse von WinControl?

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

Dann wie control.DoAThing() die resultierenden CustomControl als würde ich in dem Quellcode für mein Programm zu behandeln, was ich will, Ich habe bereits verwiesen auf die DLL mit der CustomControl Klasse, aber das Problem ist, dass .NativeElement; gibt einen Typ Object[] anstelle einer Object wie die definition of the function sagt es sollte.

Ist .NativeElement der Weg zu gehen oder habe ich seinen Zweck missverstanden?

UPDATE: überprüfte ich die Typen der Objekte in der resultierenden Object[] und die erste ist vom Typ System.__ComObject und die zweite ist System.Int32 aber ich bin mir nicht sicher, was entweder von diesen repräsentieren ...

+0

Es sieht aus wie Sie nicht das verwaltete Objekt bekommen, sondern nur die DLL die com Steuerung befindet sich in und eine ganze Zahl (als Zeiger bestimmt sind) für den Eintrittspunkt des Objekts. (das ist übrigens auch, warum dies erfordert volle Vertrauenswürdigkeit für den unmittelbaren Anrufer) Meine Vermutung ist '.NativeElement' soll nicht tun, was Sie erwarten, dass es zu. Was ist 'CustomControl'? Hast du diesen Kurs selbst geschrieben? –

+0

@TimothyGroote Nein, es handelt sich um eine Kontrolle eines Drittanbieters. Ich habe jedoch Zugriff auf den Quellcode. –

+0

Ich bin ziemlich sicher, dass, da Array Objekt erbt, das Array aka Object [] ist ein Objekt und verletzt nicht wirklich den Rückgabetyp – MPavlak

Antwort

0

Es wäre hilfreich, wenn Sie Ihren Code für Ihre Klassen CustomControl und UICustomControl gepostet haben. Basierend auf meinem vagen Verständnis Ihres Problems könnte Folgendes funktionieren: Probieren Sie es aus und veröffentlichen Sie die Ergebnisse.

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

Welche Garantie haben Sie, dass das erste Element im Array selbst definiert ist, geschweige denn das Objekt, nach dem du suchst? –

+0

Ich habe dies bereits zuvor versucht, das Ergebnis war eine Fehlermeldung, die besagt, dass ein Objektverweis nicht aka 'IAccessible a = native [0] als IAccessible;' nicht funktioniert hat. Ich denke nicht, dass das Posten des benutzerdefinierten Steuerquellcodes in diesem Fall relevant ist. Theoretisch könnte mein Problem auf alle Steuerelemente angewendet werden, einschließlich der standardmäßigen Windows Forms-Steuerelemente. –

Verwandte Themen