2

AutomationFactorySilverlightOOBアプリケーションでを使用してWMIにアクセスしたい。

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

これにエラー処理を追加したいと思います。

MSDNは、呼び出しが成功した場合の戻り値は接続されたオブジェクトへの参照であり、エラーの場合はErrオブジェクトを確認する必要があると述べています。ただし、これに関して2つの質問があります。

  • 呼び出しが成功しなかった場合の戻り値は何ですか?ヌル?使用できない任意のポインタ?
  • ErrSilverlightでオブジェクトにアクセスするにはどうすればよいですか?
  • 通話が成功したかどうかをどのように検出できますか?私が捕まえなければならない例外はありますか?
  • usingステートメントを使用した例と使用しない例を見てきました。動的オブジェクトを使用した後、手動で破棄する必要がありますか?
4

1 に答える 1

1
  • 呼び出しが成功しなかった場合の戻り値は何ですか?ヌル?使用できない任意のポインタ?

COMコンポーネントへの呼び出しが失敗した場合、値は返されず、割り当てのLHSは変更されません。代わりにCOMExceptionがスローされます。

  • ErrSilverlightでオブジェクトにアクセスするにはどうすればよいですか?

これは「Err」オブジェクトではありません。つまり、VB(Script)構造であり、C#には存在しません。COMExceptionただし、呼び出しが失敗したときにスローされるプロパティとして、あなたが求めている情報が利用可能になります。

  • 通話が成功したかどうかをどのように検出できますか?私が捕まえなければならない例外はありますか?

うん、上記を参照してください。

  • usingステートメントを使用した例と使用しない例を見てきました。動的オブジェクトを使用した後、手動で破棄する必要がありますか?

Disposeを使用してCOMオブジェクトの有効期間を管理しようとすると、さまざまな結果が得られます。個人的には、「Close」メソッドのようなものがあるものはすべて、その「Close」メソッド呼び出しを持っていることを確認し、そのままにしておきます。

本当にユーザーCOMオブジェクトを解放したい場合は、適切な時点で(あまり頻繁にではなく)を呼び出しますGC.Collect

于 2011-09-29T22:00:14.380 に答える