2009-04-03 40 views
5

ile JS'den C#'a bir dizi döndürme JavaScript kodumdan bazı verileri COM Interop ve WebBrowser WPF denetimi aracılığıyla C# koduma döndürüyorum. Bunun içerdiği javascript dizeleri nasıl alabilirimCOM-Interop

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

: Şöyle C# nesne sonucu var Şimdi

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

: başarıyla JavaScript şöyle verileri döndü Bu ComObject içinde olan dizi?

cevap

3

Geçici olarak yüklenebilen sarıcıda (System .__ ComObject) bulunan nesnenin alt yazı türünü bulmak için refection kullanın. Daha sonra bu bilgilerden yönetilen bir tip oluşturabilir veya yayınlayabilirsiniz.

Örneğin;

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

Alternatif olarak, değerleri almak için invokeMember işlevini kullanabilirsiniz. Örneğin, diziyi mümkün olan en anlamlı ilkel değerlere dönüştürmek için valueOf yöntemini veya diziyi bir csv dizgesine dönüştürmek için toString öğesini çağırırsınız.

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

DÜZENLEME: C# 4.0'da bunu yapmanın üçüncü yolu yeni dinamik türü kullanmaktır. Dinamik tip, COM nesnelerinde geç arama çağrılarını gerçekten kolaylaştırır.

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