2011-09-29 3 views
2

Silverlight OOB 응용 프로그램에서 AutomationFactory을 사용하여 WMI에 액세스하려고합니다.C#의 VBScript 오류 처리

dynamic locator = AutomationFactory.CreateObject("WbemScripting.SWbemLocator"); 
dynamic wmi = locator.ConnectServer(".", "\\root\\cimv2"); 

이제 오류 처리를 추가하고 싶습니다.

MSDN은 호출이 성공한 경우 반환 값이 연결된 개체에 대한 참조이고 오류가 발생하면 Err 개체를 확인해야한다고 설명합니다. 그러나 여기에는 두 가지 질문이 있습니다.

  • 전화가 성공적이지 않은 경우 반환 값은 무엇입니까? 없는? 내가 사용할 수없는 임의의 포인터?
  • Silverlight에서 Err 개체에 액세스하려면 어떻게해야합니까?
  • 통화가 성공했는지 어떻게 알 수 있습니까? 내가 잡아야 할 예외가있을 수 있습니까?
  • 나는 using 성명을 사용하는 몇 가지 예와없는 예를 보았습니다. 동적 객체를 사용한 후에 수동으로 처리해야합니까?

답변

1
  • 반환 값은 호출이 성공하지 못하면 무엇입니까? 없는? 내가 사용할 수없는 임의의 포인터?

COM 구성 요소 호출에 실패하면 값이 반환되지 않고 할당의 LHS가 수정되지 않습니다. 대신 COMException이 발생합니다.

  • 어떻게 실버 라이트에서 Err 개체에 액세스 할 수 ?

이것은 "Err"개체가 ​​아니며 VB (스크립트) 구문이며 C#에는 존재하지 않습니다. 그러나 통화가 실패하면 COMException의 속성으로 사용할 수 있습니다.

  • 호출이 성공적으로 완료되었는지 어떻게 알 수 있습니까? 내가 잡아야 할 예외가있을 수 있습니까?

그래, 상기 참조.

  • 일부 예제는 using 문을 사용하고 일부는 사용하지 않은 것을 보았습니다. 동적 객체를 사용한 후에 수동으로 처리해야합니까?

Dispose를 사용하여 COM 개체 수명을 관리하려는 시도에는 다양한 결과가 있습니다. 개인적으로 "Close"메서드와 비슷한 것을 가진 것은 "Close"메서드 호출을 가지고 그것을 남겨 두는 것입니다.

실제로 사용자 COM 개체를 해제하려면 해당 지점에서 (그리고 너무 자주하지 않음) GC.Collect을 호출하십시오.

+0

자세한 답변을 보내 주셔서 감사합니다. 마지막 질문 하나 : 귀하의 정보가있는 MSDN 페이지와 같이 귀하의 답변에 소스를 추가 할 수 있습니까? – Etan

+0

@ 이탄 : 나는 이것을 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comexception.aspx 줄 것이다. 그러나 나는 너 자신을 보았을 것이다. 그것의 근본적인 것들에 대한 언급은 어렵다. 예외를 throw하지 않고 메서드가 완료해야하는 모든 것을 반환하기 위해서는 이것이 기본이므로 MSDN 페이지를 찾을 위치를 모르겠습니다. 나는 어느 쪽이든을 찾는 경향이 없다. 나는 경험에서 "나의 정보를 얻었다". – AnthonyWJones