2009-04-03 20 views
5

Zwracam niektóre dane z mojego kodu JavaScript do mojego kodu C# za pośrednictwem COM Interop i kontroli WPF WebBrowser. I z powodzeniem powrócił dane, które wygląda tak w javascript:Zwracanie tablicy z JS do C# z COM-Interop

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

Teraz mam wynik obiektowego w języku C#, który wygląda tak:

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

Jak mogę uzyskać javascript ciągów zawartych w niniejszym tablica, która znajduje się w tym obiekcie ComObject?

Odpowiedz

3

Aby znaleźć rodzaj podkładania obiektu zawiniętego w rule (System .__ ComObject), należy użyć refection. Na podstawie tych informacji można wówczas utworzyć lub obsłużyć typ zarządzany.

Na przykład;

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

Alternatywnie można użyć invokeMember do pobrania wartości. Na przykład możesz wywołać metodę valueOf, aby przekonwertować tablicę na najbardziej znaczące wartości prymitywne lub naString, aby ukryć tablicę w łańcuchu CSV.

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

EDYCJA: Trzeci sposób to zrobić w C# 4.0 jest użycie nowego dynamicznego typu. Typ dynamiczny sprawia, że ​​wykonywanie wywołań z opóźnieniem obiektów COM jest naprawdę łatwe.

string csv = ((dynamic)result).toString(); 
Powiązane problemy