2009-04-03 10 views
5

JavaScriptインターフェイスとWebBrowser WPFコントロールを使用してJavaScriptコードからC#コードにデータを返します。今、私はこのようになりますC#でオブジェクトの結果を持ってJSからC#への配列をCOM-Interopで返す

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

:私は正常にJavaScriptで次のようになり、データを返した

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

は、どのように私はこの中に含まれているJavaScriptの文字列を取得することができますこのComObjectにある配列?

答えて

3

rutime呼び出し可能ラッパー(System .__ ComObject)に含まれるオブジェクトのアンダーレイタイプを見つけるには、refectionを使用します。この情報から管理対象タイプを作成またはキャストできます。

たとえば、

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

また、値を取得するためにinvokeMemberを使用することもできます。たとえば、valueOfメソッドを呼び出して配列を最も意味のあるプリミティブ値に変換するか、toStringを呼び出して配列をcsv文字列に変換することができます。

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

EDIT:c#4.0でこれを行う3番目の方法は、新しいダイナミックタイプを使用することです。動的な型は、COMオブジェクトに対して後でバインドされた呼び出しを作成することを本当に簡単にします。

string csv = ((dynamic)result).toString(); 
関連する問題