IADsPathname
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ADSI における X.500 および Windows パスを解析します。
メソッド 11
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
ディレクトリパスを解析するために Pathname オブジェクトを設定します。
| bstrADsPath | LPWSTR | in | ADSI オブジェクトのパス。 |
| lnSetType | INT | in | 取得する形式の種類を定義する 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);
オブジェクトのパスの表示方法を指定します。
| lnDisplayType | INT | in | ADS_DISPLAY_ENUM で定義されているパスの表示種類。 |
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
IADsPathname::Retrieve メソッドは、さまざまな形式の種類でオブジェクトのパスを取得します。
| lnFormatType | INT | in | パスを取得する形式を指定します。ADS_FORMAT_ENUM 列挙体で指定されている値のいずれかを指定できます。 |
| pbstrADsPath | LPWSTR* | out | オブジェクトのパスを受け取る BSTR 値へのポインターを格納します。呼び出し元は、不要になったときに SysFreeString 関数でこのメモリを解放する必要があります。 |
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
詳細およびその他の戻り値については、ADSI Error Codes を参照してください。
パス内の要素の数を取得します。
| plnNumPathElements | INT* | out | パス内の要素の数。 |
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
詳細およびその他の戻り値については、ADSI Error Codes を参照してください。
ディレクトリパスの要素を取得します。
| lnElementIndex | INT | in | 要素のインデックス。 |
| pbstrElement | LPWSTR* | out | 返される要素。 |
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
詳細およびその他の戻り値については、ADSI Error Codes を参照してください。
Pathname オブジェクトに既に設定されているディレクトリパスの末尾に要素を追加します。
| bstrLeafElement | LPWSTR | in | リーフ要素の名前。 |
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
詳細およびその他の戻り値については、ADSI Error Codes を参照してください。
Pathname オブジェクトに設定されているディレクトリパスから最後の要素を削除します。
戻り値
このメソッドは、標準の戻り値に加えて次の値をサポートします。
詳細およびその他の戻り値については、ADSI Error Codes を参照してください。
Pathname オブジェクトのコピーを作成します。
| ppAdsPath | IDispatch** | 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);
// ...
入力パス内の特殊文字をエスケープするために使用します。
| lnReserved | INT | in | 将来の使用のために予約されています。 |
| bstrInStr | LPWSTR | in | 入力文字列。 |
| pbstrOutStr | LPWSTR* | 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();
| retval | INT* | out | 現在のエスケープモード設定(整数)を受け取る出力ポインタ。ADS_ESCAPE_MODE_ENUMの値。 |
| lnEscapedMode | INT | in | 設定するエスケープモード。ADS_ESCAPE_MODE_ENUMの値で指定する。 |
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 不要)。#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,sptr #comfunc global IADsPathname_GetNumElements 10 sptr #comfunc global IADsPathname_GetElement 11 int,sptr #comfunc global IADsPathname_AddLeafElement 12 wstr #comfunc global IADsPathname_RemoveLeafElement 13 #comfunc global IADsPathname_CopyPath 14 sptr #comfunc global IADsPathname_GetEscapedElement 15 int,wstr,sptr #comfunc global IADsPathname_get_EscapedMode 16 sptr #comfunc global IADsPathname_put_EscapedMode 17 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。