Win32 API 日本語リファレンス
ホームNetworking.ActiveDirectory › IADsClass

IADsClass

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IIDc8f93dd0-4ae0-11cf-9e73-00aa004a5691継承元IADs呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl20

公式ドキュメント

IADsClass インターフェイスは、任意の ADSI オブジェクトのクラス定義を提供するスキーマクラスオブジェクトを管理するために設計されています。その他のスキーマ管理インターフェイスには、属性定義用の IADsProperty や、属性構文用の IADsSyntax があります。

解説(Remarks)

スキーマオブジェクトは、対象ディレクトリのスキーマコンテナー内に整理されています。オブジェクトのスキーマクラスにアクセスするには、そのオブジェクトの Schema プロパティを使用し(すなわち IADs::get_Schema プロパティメソッドを呼び出し)、ADsPath 文字列を取得したうえで、その文字列を使ってスキーマクラスオブジェクトにバインドします。

次のコード例は、IADsClass インターフェイスの実装方法を示しています。

Dim obj As IADs
Dim cls As IADsClass

On Error GoTo Cleanup

Set obj = GetObject("WinNT://myMachine,computer")
Set cls = GetObject(obj.Schema)

' 必須プロパティと省略可能プロパティを調べます。
For Each p In cls.MandatoryProperties
    MsgBox "Must-have: " & p
Next
For Each p In cls.OptionalProperties
    MsgBox "May-have: " & p
Next

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set obj = Nothing
    Set cls = Nothing

次のコード例は、IADsClass インターフェイスの実装方法を示しています。

HRESULT hr = S_OK;
IADsClass *pCls = NULL;
IADs *pADs;
BSTR bstrSchema;
VARIANT var;

hr = CoInitialize(NULL);
hr = ADsGetObject(L"WinNT://myComputer,computer",
                  IID_IADs,
                  (void**)&pADs);
if (FAILED(hr)) { goto Cleanup;}

hr = pADs->get_Schema(&bstrSchema);
pADs->Release();
if(FAILED(hr)) { goto Cleanup; }

hr = ADsGetObject(bstrSchema, IID_IADsClass, (void**)&pCls);
if(FAILED(hr)) { goto Cleanup; }

VariantInit(&var);
pCls->get_MandatoryProperties(&var);
hr = printVarArray(var);

VariantClear(&var);
pCls->get_OptionalProperties(&var);
hr = printVarArray(var);

Cleanup:
    if(pCls)
        pCls->Release();

    if(pADs)
        pADs->Release();

    SysFreeString(bstrSchema);
    VariantClear(&var);
    CoUninitialize();
    return hr;

次のコード例は、printVarArray 関数の実装方法を示しています。

HRESULT printVarArray(VARIANT var)
{
    LONG lstart, lend;
    VARIANT varItem;
    HRESULT hr;
    SAFEARRAY *sa = V_ARRAY( &var );
    hr = SafeArrayGetLBound( sa, 1, &lstart );
    hr = SafeArrayGetUBound( sa, 1, &lend );
    VariantInit(&varItem);
    for ( long idx=lstart; idx <= lend; idx++ ) {
        hr = SafeArrayGetElement( sa, &idx, &varItem );
        printf("   %S \n", V_BSTR(&varItem));
        VariantClear(&varItem);
    }
    printf("\n");
    return S_OK;
}

メソッド 30

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 20 HRESULT get_PrimaryInterface(LPWSTR* retval)
retvalLPWSTR*outクラスのプライマリインターフェイスのIIDを文字列で受け取る出力ポインタ。
vtbl 21 HRESULT get_CLSID(LPWSTR* retval)
retvalLPWSTR*outクラスのCLSIDを文字列で受け取る出力ポインタ。
vtbl 22 HRESULT put_CLSID(LPWSTR bstrCLSID)
bstrCLSIDLPWSTRin設定するクラスのCLSIDを示す文字列。
vtbl 23 HRESULT get_OID(LPWSTR* retval)
retvalLPWSTR*outクラスのオブジェクト識別子(OID)を示す文字列を受け取る出力ポインタ。
vtbl 24 HRESULT put_OID(LPWSTR bstrOID)
bstrOIDLPWSTRin設定するクラスのオブジェクト識別子(OID)を示す文字列。
vtbl 25 HRESULT get_Abstract(VARIANT_BOOL* retval)
retvalVARIANT_BOOL*outクラスが抽象クラスならVARIANT_TRUEを受け取るVARIANT_BOOL出力ポインタ。
vtbl 26 HRESULT put_Abstract(VARIANT_BOOL fAbstract)
fAbstractVARIANT_BOOLinクラスを抽象クラスにする場合にVARIANT_TRUEを指定する。
vtbl 27 HRESULT get_Auxiliary(VARIANT_BOOL* retval)
retvalVARIANT_BOOL*outクラスが補助クラスならVARIANT_TRUEを受け取るVARIANT_BOOL出力ポインタ。
vtbl 28 HRESULT put_Auxiliary(VARIANT_BOOL fAuxiliary)
fAuxiliaryVARIANT_BOOLinクラスを補助クラスにする場合にVARIANT_TRUEを指定する。
vtbl 29 HRESULT get_MandatoryProperties(VARIANT* retval)
retvalVARIANT*out必須プロパティ名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 30 HRESULT put_MandatoryProperties(VARIANT vMandatoryProperties)
vMandatoryPropertiesVARIANTin設定する必須プロパティ名の配列を保持するVARIANT。
vtbl 31 HRESULT get_OptionalProperties(VARIANT* retval)
retvalVARIANT*out任意プロパティ名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 32 HRESULT put_OptionalProperties(VARIANT vOptionalProperties)
vOptionalPropertiesVARIANTin設定する任意プロパティ名の配列を保持するVARIANT。
vtbl 33 HRESULT get_NamingProperties(VARIANT* retval)
retvalVARIANT*out名前付けに使うプロパティ名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 34 HRESULT put_NamingProperties(VARIANT vNamingProperties)
vNamingPropertiesVARIANTin設定する名前付け用プロパティ名の配列を保持するVARIANT。
vtbl 35 HRESULT get_DerivedFrom(VARIANT* retval)
retvalVARIANT*out継承元クラス名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 36 HRESULT put_DerivedFrom(VARIANT vDerivedFrom)
vDerivedFromVARIANTin設定する継承元クラス名の配列を保持するVARIANT。
vtbl 37 HRESULT get_AuxDerivedFrom(VARIANT* retval)
retvalVARIANT*out継承する補助クラス名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 38 HRESULT put_AuxDerivedFrom(VARIANT vAuxDerivedFrom)
vAuxDerivedFromVARIANTin設定する継承補助クラス名の配列を保持するVARIANT。
vtbl 39 HRESULT get_PossibleSuperiors(VARIANT* retval)
retvalVARIANT*out親になりうるクラス名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 40 HRESULT put_PossibleSuperiors(VARIANT vPossibleSuperiors)
vPossibleSuperiorsVARIANTin設定する親になりうるクラス名の配列を保持するVARIANT。
vtbl 41 HRESULT get_Containment(VARIANT* retval)
retvalVARIANT*out格納可能な子クラス名の配列を保持するVARIANTを受け取る出力ポインタ。
vtbl 42 HRESULT put_Containment(VARIANT vContainment)
vContainmentVARIANTin設定する格納可能な子クラス名の配列を保持するVARIANT。
vtbl 43 HRESULT get_Container(VARIANT_BOOL* retval)
retvalVARIANT_BOOL*outクラスがコンテナならVARIANT_TRUEを受け取るVARIANT_BOOL出力ポインタ。
vtbl 44 HRESULT put_Container(VARIANT_BOOL fContainer)
fContainerVARIANT_BOOLinクラスをコンテナにする場合にVARIANT_TRUEを指定する。
vtbl 45 HRESULT get_HelpFileName(LPWSTR* retval)
retvalLPWSTR*outクラスのヘルプファイル名を示す文字列を受け取る出力ポインタ。
vtbl 46 HRESULT put_HelpFileName(LPWSTR bstrHelpFileName)
bstrHelpFileNameLPWSTRin設定するクラスのヘルプファイル名を示す文字列。
vtbl 47 HRESULT get_HelpFileContext(INT* retval)
retvalINT*outヘルプファイル内のコンテキストID(トピック番号)を受け取る出力ポインタ。
vtbl 48 HRESULT put_HelpFileContext(INT lnHelpFileContext)
lnHelpFileContextINTin設定するヘルプファイル内のコンテキストID(トピック番号)。
vtbl 49 HRESULT Qualifiers(IADsCollection** ppQualifiers)

このスキーマクラスに対する追加の修飾子(qualifier)を記述する ADSI オブジェクトのコレクションを返します。

ppQualifiersIADsCollection**outこのスキーマクラスに対する追加の制限を表す ADSI コレクションオブジェクトへのインターフェイスポインターを受け取る、IADsCollection ポインター変数のアドレス。

戻り値

このメソッドは、標準の戻り値に加えて、次の値をサポートします。

詳細およびその他の戻り値については、ADSI エラーコード を参照してください。

解説(Remarks)

修飾子オブジェクトはプロバイダー固有です。サポートされている場合、このメソッドを使用して拡張スキーマデータを取得できます。

このメソッドは現在、いずれの Microsoft 製プロバイダーでもサポートされていません。

次のコード例は、このメソッドの使用方法を示しています。

Dim ads As IADs
Dim cls As IADsClass
On Error GoTo Cleanup

Set ads = GetObject("WinNT://myComputer, computer")
Set cls = GetObject(ads.Schema)

' 追加のクラスデータがどこにあるかをユーザーに表示します。
ListBox.additem "Additional class information can be found from:"
For Each q In cls.Qualifiers
    listBox.additem q.Name
Next

Cleanup:
    If (Err.Number<>0) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set ads = Nothing
    Set cls = Nothing
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IADsClass "{C8F93DD0-4AE0-11CF-9E73-00AA004A5691}"
#usecom global IADsClass IID_IADsClass "{}"
#comfunc global IADsClass_get_PrimaryInterface     20 var
#comfunc global IADsClass_get_CLSID                21 var
#comfunc global IADsClass_put_CLSID                22 wstr
#comfunc global IADsClass_get_OID                  23 var
#comfunc global IADsClass_put_OID                  24 wstr
#comfunc global IADsClass_get_Abstract             25 var
#comfunc global IADsClass_put_Abstract             26 int
#comfunc global IADsClass_get_Auxiliary            27 var
#comfunc global IADsClass_put_Auxiliary            28 int
#comfunc global IADsClass_get_MandatoryProperties  29 var
#comfunc global IADsClass_put_MandatoryProperties  30 int
#comfunc global IADsClass_get_OptionalProperties   31 var
#comfunc global IADsClass_put_OptionalProperties   32 int
#comfunc global IADsClass_get_NamingProperties     33 var
#comfunc global IADsClass_put_NamingProperties     34 int
#comfunc global IADsClass_get_DerivedFrom          35 var
#comfunc global IADsClass_put_DerivedFrom          36 int
#comfunc global IADsClass_get_AuxDerivedFrom       37 var
#comfunc global IADsClass_put_AuxDerivedFrom       38 int
#comfunc global IADsClass_get_PossibleSuperiors    39 var
#comfunc global IADsClass_put_PossibleSuperiors    40 int
#comfunc global IADsClass_get_Containment          41 var
#comfunc global IADsClass_put_Containment          42 int
#comfunc global IADsClass_get_Container            43 var
#comfunc global IADsClass_put_Container            44 int
#comfunc global IADsClass_get_HelpFileName         45 var
#comfunc global IADsClass_put_HelpFileName         46 wstr
#comfunc global IADsClass_get_HelpFileContext      47 var
#comfunc global IADsClass_put_HelpFileContext      48 int
#comfunc global IADsClass_Qualifiers               49 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。