2009-04-03 4 views
5

내 JavaScript 코드에서 COM Interop 및 WebBrowser WPF 컨트롤을 통해 내 C# 코드로 일부 데이터가 반환됩니다. 나는이에 포함 된 자바 스크립트 문자열을 얻을 수있는 방법COM Interop을 사용하여 JS에서 C#으로 배열 반환

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

을 :이처럼 보이는 C#에서 객체의 결과가 이제

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

: 나는 성공적으로 자바 스크립트에서 다음과 같습니다 데이터를 돌아왔다 이 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에서 이렇게하는 세 번째 방법은 새로운 동적 유형을 사용하는 것입니다. 동적 유형을 사용하면 COM 객체에서 늦게 바인딩 된 호출을 만드는 것이 매우 쉽습니다.

string csv = ((dynamic)result).toString(); 
관련 문제