5

COM Interop と WebBrowser WPF コントロールを介して、JavaScript コードから C# コードにデータを返しています。Javascript で次のようなデータを正常に返しました。

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

これで、C# でオブジェクトの結果が次のようになります。

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

このComObjectにあるこの配列に含まれるJavaScript文字列を取得するにはどうすればよいですか?

4

1 に答える 1

4

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] 

編集:c#4.0でこれを行う3番目の方法は、新しい動的タイプを使用することです。動的型を使用すると、COMオブジェクトでレイトバウンド呼び出しを簡単に行うことができます。

string csv = ((dynamic)result).toString();
于 2009-04-06T02:42:37.587 に答える