2009-10-15 6 views
1
public int Set(int newValue,Object obj) 
{ 
    //System.Windows.Forms.Control ctrl = (System.Windows.FormsControl)Object; 
} 

여기의 개체는 COM 개체입니다. 이제 .NET 객체로 변환하고 속성을 확보하려고합니다. 가장 쉬운 방법은 무엇입니까?COM 개체를 .Net 개체로 변환

답변

0

COM 개체를 Windows.Forms.Control 개체로 직접 변환 할 수 없습니다. 그것은 특정한 유형이 아닙니다.

COM 개체는 올바른 형식 라이브러리를 사용하는 경우 자체 속성을 제공해야합니다. 해당 속성을 적절한 유형으로 변환하면 해당 속성을 직접 사용할 수 있어야합니다.

+0

집합 obj1 = SwfWindow ("Form1") SwfObject ("radioGroup") 개체 집합 obj = DotNetFactory.CreateInstance ("QTCustServer.RadioGroupSrv1", "C : .... 내 문서/Visual Studio 2005/프로젝트 /QuickTestCustomServer2/bin/CustServer.dll ") obj.Set 20, obj1 ... 여기 obj1은 Set 메서드에 전달하는 COM 개체입니다. 나는 그것이 radioGroup 컨트롤이라는 것을 알고 있지만 당신이 말했듯이 나는 그것을 직접 던질 수는 없다. 그것을 던지기에 적합한 유형은 무엇입니까? – Learner

+0

QTP에서 vbscript를 사용하여 .net dll을 호출하고 있습니다. – Learner

0

문제의 개체가 COM 개체라는 사실은 문제가되지 않습니다. 이미 하나이므로 .NET 개체로 변환 할 필요가 없습니다.

var objectType = obj.GetType(); 

foreach(var prop in objectType.GetProperties()) 
{ 
    Console.WriteLine("Property {0} of type {1}", 
         prop.Name, prop.PropertyType.Name); 
} 

속성을 호출하려면이 유형의 InvokeMember에 방법을 사용할 수 있습니다 : 당신은 당신이 예를 들어, 유형 정보를 가지고 있지 않은있는 다른 .NET 객체가 것처럼이 개체의 속성 잡아 수업. 여기 true에 객체 (존재하는 경우) "표시"속성을 설정하는 방법은 다음과 같습니다

objectType.InvokeMember("Visible", BindingFlags.SetProperty, 
           null, obj, new object[] { true }); 

는 .NET 4 또는 4.5을 사용하는 경우, 당신은 유래 COM 작업을 확인하기 위해 동적 키워드를 사용할 수 있습니다 .NET 개체가 더 쉽습니다.

var xlAppType = Type.GetTypeFromProgID("Excel.Application"); 

dynamic xlApp = Activator.CreateInstance(xlAppType); 

xlApp.Visible = true; 

마지막 예제에서는 Visible 속성 호출에 주문이 필요없는 점에 유의하십시오. 요즘 COM 객체로 작업 할 수있을 때마다 역학을 사용하려고합니다.

관련 문제