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

IADsPathname

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

公式ドキュメント

ADSI における X.500 および Windows パスを解析します。

メソッド 11

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

vtbl 7 HRESULT Set(LPWSTR bstrADsPath, INT lnSetType)

ディレクトリパスを解析するために Pathname オブジェクトを設定します。

bstrADsPathLPWSTRinADSI オブジェクトのパス。
lnSetTypeINTin取得する形式の種類を定義する ADS_SETTYPE_ENUM オプション。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

解説(Remarks)

このメソッドは、指定されたとおりに名前空間を設定し、パスの解析操作を実行するための適切なプロバイダーを特定します。別の名前空間に再設定すると、このメソッドで既に設定されたデータは失われます。

次の Visual Basic のコード例は、Pathname オブジェクトに完全な ADSI パスを設定します。

Dim x As New Pathname
 
x.Set "LDAP://server/CN=Jeff Smith, DC=Fabrikam, DC=Com", _
       ADS_SETTYPE_FULL
dn = x.GetElement(0)    ' dn は "CN=Jeff Smith" になります。

次の VBScript/ASP のコード例は、Pathname オブジェクトに完全な ADSI パスを設定します。

<%
Dim x
const ADS_SETTYPE_FULL = 1
Set x = CreateObject("Pathname")
path = "LDAP://server/CN=Jeff Smith, DC=Fabrikam,DC=com" 
x.Set path, ADS_SETTYPE_FULL
dn = x.GetElement(0)    ' dn は "CN=Jeff Smith" になります。
%>

次の C++ のコード例は、Pathname オブジェクトに完全な ADSI パスを設定します。

IADsPathname *pPathname=NULL;
HRESULT hr;
 
hr = CoCreateInstance(CLSID_Pathname,
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      IID_IADsPathname,
                      (void**)&pPathname);
 
if(FAILED(hr)) 
{
    if(pPathname) pPathname->Release();
    return NULL;
}
 
hr = pPathname->Set(CComBSTR("LDAP://CN=pencil/desk"), 
                    ADS_SETTYPE_FULL);
vtbl 8 HRESULT SetDisplayType(INT lnDisplayType)

オブジェクトのパスの表示方法を指定します。

lnDisplayTypeINTinADS_DISPLAY_ENUM で定義されているパスの表示種類。

戻り値

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

vtbl 9 HRESULT Retrieve(INT lnFormatType, LPWSTR* pbstrADsPath)

IADsPathname::Retrieve メソッドは、さまざまな形式の種類でオブジェクトのパスを取得します。

lnFormatTypeINTinパスを取得する形式を指定します。ADS_FORMAT_ENUM 列挙体で指定されている値のいずれかを指定できます。
pbstrADsPathLPWSTR*outオブジェクトのパスを受け取る BSTR 値へのポインターを格納します。呼び出し元は、不要になったときに SysFreeString 関数でこのメモリを解放する必要があります。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

vtbl 10 HRESULT GetNumElements(INT* plnNumPathElements)

パス内の要素の数を取得します。

plnNumPathElementsINT*outパス内の要素の数。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

vtbl 11 HRESULT GetElement(INT lnElementIndex, LPWSTR* pbstrElement)

ディレクトリパスの要素を取得します。

lnElementIndexINTin要素のインデックス。
pbstrElementLPWSTR*out返される要素。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

vtbl 12 HRESULT AddLeafElement(LPWSTR bstrLeafElement)

Pathname オブジェクトに既に設定されているディレクトリパスの末尾に要素を追加します。

bstrLeafElementLPWSTRinリーフ要素の名前。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

vtbl 13 HRESULT RemoveLeafElement()

Pathname オブジェクトに設定されているディレクトリパスから最後の要素を削除します。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

vtbl 14 HRESULT CopyPath(IDispatch** ppAdsPath)

Pathname オブジェクトのコピーを作成します。

ppAdsPathIDispatch**out返される IADsPathname オブジェクトの IDispatch インターフェイスポインター。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

解説(Remarks)

このメソッドは、オブジェクトのパスを変更しつつ、元のオブジェクトのパスを保持するために使用します。

次の Visual Basic のコード例は、パス名のコピーを作成する方法を示します。

Dim x, y As New Pathname
x.Set "LDAP://srv1/dc=dom,dc=company,dc=com",ADS_SETTYPE_FULL
set y = x.CopyPath
MsgBox y.Retrieve(ADS_FORMAT_WINDOWS)

次の VBScript/ASP のコード例は、パス名のコピーを作成する方法を示します。

<%
Dim x, y
Const ADS_SETTYPE_FULL = 1
Const ADS_FORMAT_WINDOWS = 1
Set x = CreateObject("Pathname")
x.Set "LDAP://srv1/dc=dom,dc=company,dc=com",ADS_SETTYPE_FULL
 
set y = x.CopyPath
Response.Write y.Retrieve(ADS_FORMAT_WINDOWS)
%>

次の C++ のコード例は、パス名オブジェクトのコピーを作成します。GetPathnameObject 関数の詳細およびコード例については、IADsPathname を参照してください。

IADsPathname *pPath;
LPWSTR adsPath;
adsPath = L"LDAP://server/cn=jeff smith,dc=Fabrikam,dc=com";
 
IADsPathname *pPath = GetPathnameObject(adsPath)
if (!pPath) exit(0);
 
IDispatch *pDisp;
HRESULT hr;
hr = pPath->CopyPath(&pDisp);
if(FAILED(hr)) exit(hr);
 
IADsPathname *pPathCopy;
hr = pDisp->QueryInterface(IID_IADsPathname,(void**)&pPathCopy);
 
// ...
vtbl 15 HRESULT GetEscapedElement(INT lnReserved, LPWSTR bstrInStr, LPWSTR* pbstrOutStr)

入力パス内の特殊文字をエスケープするために使用します。

lnReservedINTin将来の使用のために予約されています。
bstrInStrLPWSTRin入力文字列。
pbstrOutStrLPWSTR*out出力文字列。

戻り値

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

詳細およびその他の戻り値については、ADSI Error Codes を参照してください。

解説(Remarks)

このメソッドは、ユーザーインターフェイスからの入力として、エスケープされていない文字列に特殊文字を含むパスを処理するために使用します。入力文字列は、パスの単一の要素(名前と値のペア)である必要があります。つまり "CN=Smith,Jeff" のような形式です。

次の Visual Basic のコード例は、IADsPathname::GetEscapedElement によって生じる効果を示します。このコードを実行すると、rdn には "cn=smith,jeff" が格納されます。

Dim x As New Pathname
 
rdn = x.GetEscapedElement(0, "cn=smith,jeff")

次の VBScript のコード例は、IADsPathname::GetEscapedElement によって生じる効果を示します。このコードを実行すると、rdn には "cn=smith,jeff" が格納されます。

Dim x 
Set x = CreateObject("Pathname")
rdn = x.GetEscapedElement(0, "cn=smith,jeff")

次の C++ のコード例は、IADsPathname::GetEscapedElement によって生じる効果を示します。このコードを実行すると、rdn には "cn=smith,jeff" が格納されます。

LPWSTR adsPath=L"LDAP://server/cn=jeffsmith,dc=Fabrikam,dc=com";
 
IADsPathname *pPath = GetPathnameObject(adsPath);
BSTR rdn;
HRESULT hr = pPath->GetEscapedElement(0,CComBSTR("cn=smith,jeff")
                                      ,&rdn);
 
pPath->Release();
vtbl 16 HRESULT get_EscapedMode(INT* retval)
retvalINT*out現在のエスケープモード設定(整数)を受け取る出力ポインタ。ADS_ESCAPE_MODE_ENUMの値。
vtbl 17 HRESULT put_EscapedMode(INT lnEscapedMode)
lnEscapedModeINTin設定するエスケープモード。ADS_ESCAPE_MODE_ENUMの値で指定する。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IADsPathname "{D592AED4-F420-11D0-A36E-00C04FB950DC}"
#usecom global IADsPathname IID_IADsPathname "{}"
#comfunc global IADsPathname_Set                7 wstr,int
#comfunc global IADsPathname_SetDisplayType     8 int
#comfunc global IADsPathname_Retrieve           9 int,var
#comfunc global IADsPathname_GetNumElements     10 var
#comfunc global IADsPathname_GetElement         11 int,var
#comfunc global IADsPathname_AddLeafElement     12 wstr
#comfunc global IADsPathname_RemoveLeafElement  13
#comfunc global IADsPathname_CopyPath           14 sptr
#comfunc global IADsPathname_GetEscapedElement  15 int,wstr,var
#comfunc global IADsPathname_get_EscapedMode    16 var
#comfunc global IADsPathname_put_EscapedMode    17 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。