マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

COM対応版の変更点の説明(構造化例外処理を使わないで値がないかを確認)

Active Directory データのプロパティ出力の COM 対応版について、4 つの変更点のうち 3 つ目の説明です。

大きい整数セキュリティ記述子(SecurityDescriptor)の次は、構造化例外処理を使わないで値がないかを確認する部分です。(コードはこちら VB C#) ※セキュリティ記述子部分のコードと説明を修正しました。

 

どこかというと、オプションのプロパティ出力(OutputOptionalProperties)の最初のループの直後です。(以前のコードはこちら VB C#

以前は

1. DirectoryEntry.NativeObject を ADSI の基本インターフェイスである IADs にキャスト

2. DirectoryEntry.SchemaEntry.NativeObject を IADsClass にキャスト

3. IADsClass.OptionalProperties を Object 配列にキャストしたものを引数にして IADs.GetInfoEx メソッドで プロパティをディレクトリ ストアから読込み

4. ループ内 : IADs.GetEx メソッドでプロパティ(属性)の値を取得(Object 型)

5. プロパティ(属性)が設定されてないと例外が発生するので、その時は「未設定」を出力

という処理でした。

 

今回は

1. DirectoryEntry.SchemaEntry.NativeObject を IADsClass にキャスト

2. IADsClass.OptionalProperties を Object 配列にキャスト

3. DirectoryEntry.Invoke メソッドで IADs.GetInfoEx メソッドを呼び出して プロパティをディレクトリ ストアから読込み

4. ループ内 : DirectoryEntry.Properties.Item で プロパティ(型は PropertyValueCollection)を取得

5. PropertyValueCollection.Value (Object 型)が null 参照なら「未設定」を出力

という処理にしました。

 

ADSI のインターフェイスは値が設定されてないプロパティについて、IADs.GetEx メソッドでの取得操作や、IADs を継承してる IADsUserIADsGroup に定義されてるプロパティ(Description など)へのアクセスをすると例外が発生します。

一方 DirectoryEntry の方は、DirectoryEntry.Properties.Item の Value プロパティで プロパティにアクセス・値を取得しても例外は発生せず、null が返されるだけです。

 

今回変更したことで、パフォーマンスは劇的によくなりました。まぁ当然といえば当然なんですけどね。

特にユーザの場合はプロパティの数が多いので、プロパティを全然設定してないと時間かかってましたから。

 

やっと構造化例外処理を使わなくていいようになりました。

投稿日時 : 2013年12月10日 20:38

コメントを追加

# jFPbqqifif 2021/07/03 4:21 https://www.blogger.com/profile/060647091882378654

This very blog is obviously awesome and also factual. I have picked up a bunch of useful things out of it. I ad love to come back again soon. Thanks a bunch!

# wuoueijnxuhm 2022/06/15 11:38 jhcgcmvc

buy plaquenil pills http://www.hydroxychloroquinex.com/

タイトル
名前
URL
コメント