2009-04-03 15 views
5

Estoy devolviendo algunos datos de mi código JavaScript a mi código C# a través de COM Interop y el control WebBrowser WPF. He vuelto con éxito los datos que se parece a esto en Javascript:Devolución de una matriz de JS a C# con COM-Interop

var result = new Array(); 
result[0] = cbCamera.selectedItem; 
result[1] = cbMicrophone.selectedItem; 

Ahora tengo el resultado de objetos en C# que se parece a esto:

result.GetType(); 
{Name = "__ComObject" FullName = "System.__ComObject"} 

¿Cómo puedo obtener las cadenas de JavaScript contenidas en el presente matriz que se encuentra en este ComObject?

Respuesta

3

Para encontrar el tipo de capa inferior del objeto contenido en el envoltorio rutime invocable (System .__ ComObject) usaría refection. A partir de esta información, podrá crear o transmitir a un tipo gestionado.

Por ejemplo;

string type = (string)result.GetType().InvokeMember("getType", 
BindingFlags.InvokeMethod, null, result, null); 

Alternativamente podría utilizar invokeMember para recuperar los valores. Por ejemplo, puede invocar el método valueOf para convertir la matriz a los valores primitivos más significativos posibles o a String para convertir la matriz en una cadena csv.

string result = (string)result.GetType().InvokeMember("toString", 
BindingFlags.InvokeMethod, null, result, null); 
string[] jsArray = result.Split(','); 
// c# jsArray[n] = js result[n] 

EDITAR: Una tercera forma de hacer esto en C# 4.0 es utilizar el nuevo tipo dinámico. El tipo dinámico hace que sea muy fácil realizar llamadas en destino en objetos COM.

string csv = ((dynamic)result).toString(); 
Cuestiones relacionadas