2009-04-03 6 views
5

Je renvoie des données de mon code JavaScript à mon code C# via COM Interop et le contrôle WebBrowser WPF. Je suis retourné avec succès les données qui ressemble à ceci en Javascript:Retour d'un tableau de JS à C# avec COM-Interop

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

Maintenant, j'ai le résultat de l'objet en C# qui ressemble à ceci:

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

Comment puis-je obtenir les chaînes javascript contenues dans ce tableau qui est dans ce ComObject?

Répondre

3

Pour trouver le type de l'objet underlaying contenu dans l'emballage rutime appelable (System .__ ComObject) vous utiliseriez refection. Vous pourrez alors créer ou diffuser un type géré à partir de ces informations.

Par exemple;

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

Vous pouvez également utiliser invokeMember pour récupérer les valeurs. Par exemple, vous pouvez appeler la méthode valueOf pour convertir le tableau en valeurs primitives les plus significatives possibles ou toString pour convertir le tableau en chaîne csv.

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

EDIT: Une troisième façon de procéder dans C# 4.0 consiste à utiliser le nouveau type dynamique. Le type dynamique facilite vraiment les appels à liaison tardive sur les objets COM.

string csv = ((dynamic)result).toString(); 
Questions connexes