Win32 API 日本語リファレンス
ホームSystem.ComponentServices › ObjectContext

ObjectContext

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

公式ドキュメント

現在のオブジェクトのコンテキストへのアクセスを提供します。オブジェクトのコンテキストは、主にトランザクションを扱う場合やオブジェクトのセキュリティを扱う場合に使用されます。(ObjectContext)

メソッド 13

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

vtbl 7 HRESULT CreateInstance(LPWSTR bstrProgID, VARIANT* pObject)

現在のオブジェクトのコンテキストを使用してオブジェクトを作成します。(ObjectContext.CreateInstance)

bstrProgIDLPWSTRinインスタンス化するオブジェクトの型の ProgID。
pObjectVARIANT*out新しいオブジェクトへの参照。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して CreateInstance を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

CreateInstance を使用してオブジェクトを作成すると、新しいオブジェクトのコンテキストは、現在のオブジェクトの ObjectContext と、新しいオブジェクトのコンポーネントの宣言的プロパティから導出されます。新しいオブジェクトは、常にそれを作成したオブジェクトと同じアクティビティ内で実行されます。現在のオブジェクトがトランザクションを持つ場合、新しいオブジェクトがそのトランザクションのスコープ内で実行されるかどうかは、新しいオブジェクトのコンポーネントのトランザクション属性によって決まります。

コンポーネントのトランザクション属性の設定がトランザクションを必須とするか、またはトランザクションをサポートする場合、新しいオブジェクトは作成元のトランザクションを継承します。コンポーネントのトランザクション属性が新しいトランザクションを必須とする場合、COM+ は新しいオブジェクトのために新しいトランザクションを開始します。コンポーネントのトランザクション属性がトランザクションをサポートしない場合、新しいオブジェクトはいかなるトランザクションの下でも実行されません。

vtbl 8 HRESULT SetComplete()

オブジェクトが実行されているトランザクションをコミットできること、およびメソッドから戻る際にオブジェクトを非アクティブ化する必要があることを宣言します。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して SetComplete を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

オブジェクトは、SetComplete を呼び出したメソッドから戻る際に自動的に非アクティブ化されます。オブジェクトが自動トランザクションのルートである場合、COM+ はトランザクションのコミットを試みます。ただし、そのトランザクションに参加していたいずれかのオブジェクトが SetAbort を呼び出していた場合、または DisableCommit を呼び出してその後 EnableCommitSetComplete を呼び出していない場合、トランザクションはアボートされます。

オブジェクトがメソッド呼び出しから戻った後に状態を維持する必要がない場合は、SetComplete を呼び出すべきです。そうすることで、戻るとすぐに自動的に非アクティブ化され、そのリソースを回収できます。

vtbl 9 HRESULT SetAbort()

オブジェクトが実行されているトランザクションをアボートしなければならないこと、およびメソッドから戻る際にオブジェクトを非アクティブ化する必要があることを宣言します。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して SetAbort を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

オブジェクトは、SetAbort を呼び出したメソッドから戻る際に自動的に非アクティブ化されます。オブジェクトが自動トランザクションのルートである場合、COM+ はトランザクションをアボートします。オブジェクトがトランザクション対応であるが自動トランザクションのルートではない場合、そのオブジェクトが参加しているトランザクションはアボートが確定します。

エラーハンドラー内で SetAbort を呼び出すことで、エラー発生時にトランザクションが確実にアボートされるようにできます。また、メソッドの先頭で SetAbort を呼び出しておくことで、予期しない戻りが発生した場合にオブジェクトが早まってコミットされるのを防ぎ、その後すべてが正常に進んだら、メソッドが戻る直前に SetComplete を呼び出すこともできます。

vtbl 10 HRESULT EnableCommit()

現在のオブジェクトの処理が必ずしも完了していないが、そのトランザクションの更新は一貫性があり、現在の形式でコミット可能であることを宣言します。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了し、オブジェクトのトランザクションの更新をコミットできるようになりました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して EnableCommit を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

オブジェクトが EnableCommit を呼び出すと、それが参加しているトランザクションのコミットを許可しますが、SetComplete または SetAbort を呼び出すまで、あるいはトランザクションが完了するまで、クライアントからの呼び出しをまたいで内部状態を維持します。

EnableCommit は、オブジェクトがアクティブ化されたときの既定の状態です。したがって、オブジェクトが次のクライアントからの呼び出しのために内部状態を維持する必要がない限り、メソッドから戻る前に常に SetComplete または SetAbort を呼び出すべきです。

vtbl 11 HRESULT DisableCommit()

オブジェクトのトランザクションの更新が一貫しておらず、現在の状態ではコミットできないことを宣言します。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。オブジェクトが EnableCommit または SetComplete のいずれかを呼び出すまで、オブジェクトのトランザクションの更新はコミットできません。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して DisableCommit を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。
CONTEXT_E_NOCONTEXT
現在のオブジェクトには、それに関連付けられたコンテキストがありません。これはおそらく、COM+ の CreateInstance メソッドのいずれかで作成されなかったためです。

解説(Remarks)

DisableCommit メソッドを使用すると、ステートフルなオブジェクトにおいて、メソッド呼び出しの間にトランザクションが早まってコミットされるのを防ぐことができます。オブジェクトが DisableCommit を呼び出すと、その処理が一貫しておらず、クライアントからさらにメソッド呼び出しを受け取るまで処理を完了できないことを示します。また、その処理を実行するために状態を維持する必要があることも示します。これにより、COM+ がメソッド呼び出しから戻る際にオブジェクトを非アクティブ化してそのリソースを回収するのを防ぎます。オブジェクトが DisableCommit を呼び出している場合、オブジェクトが EnableCommit または SetComplete を呼び出す前にクライアントがトランザクションをコミットしようとすると、トランザクションはアボートされます。

vtbl 12 HRESULT IsInTransaction(VARIANT_BOOL* pbIsInTx)

現在のオブジェクトがトランザクション内で実行されているかどうかを示します。(ObjectContext.IsInTransaction)

pbIsInTxVARIANT_BOOL*out現在のオブジェクトがトランザクション内で実行されている場合は TRUE、それ以外の場合は FALSE

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して IsInTransaction を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

このメソッドを使用すると、トランザクションを必要とするオブジェクトがトランザクションなしで実行されることが決してないようにできます。たとえば、トランザクションを必要とするコンポーネントが Component Services 管理ツールで正しく構成されていない場合、このメソッドを使用してオブジェクトがトランザクションを持たないことを判定できます。その後、ユーザーに問題を知らせるためにエラーを返したり、適切な処置を行ったりできます。

vtbl 13 HRESULT IsSecurityEnabled(VARIANT_BOOL* pbIsEnabled)

現在のオブジェクトに対してセキュリティが有効になっているかどうかを示します。

pbIsEnabledVARIANT_BOOL*outこのオブジェクトに対してセキュリティが有効になっている場合は TRUE、それ以外の場合は FALSE

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
メソッドが正常に完了しました。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して IsSecurityEnabled を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

COM+ 環境では、サーバーアプリケーションおよびライブラリアプリケーションはロールベースのセキュリティを使用できます。IsSecurityEnabled は、アプリケーションがロールベースのセキュリティを使用しており、かつアプリケーションとメソッドを呼び出した特定のコンポーネントの両方でロールベースのセキュリティが有効になっている場合に TRUE を返します。

vtbl 14 HRESULT IsCallerInRole(LPWSTR bstrRole, VARIANT_BOOL* pbInRole)

オブジェクトの直接の呼び出し元が、指定されたロールに(直接、またはグループの一部として)属しているかどうかを示します。(ObjectContext.IsCallerInRole)

bstrRoleLPWSTRinロールの名前。
pbInRoleVARIANT_BOOL*out呼び出し元が指定されたロールに属している場合は TRUE、それ以外の場合は FALSE。このパラメーターは、セキュリティが有効になっていない場合にも TRUE に設定されます。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_FAIL のほか、次の値を返すことがあります。

戻り値 説明
S_OK
bstrRole パラメーターで指定されたロールは認識されているロールであり、pbIsInRole パラメーターで返される Boolean の結果は、呼び出し元がそのロールに属しているかどうかを示します。
CONTEXT_E_ROLENOTFOUND
bstrRole パラメーターで指定されたロールは存在しません。
E_UNEXPECTED
予期しないエラーが発生しました。これは、あるオブジェクトが自身の ObjectContext ポインターを別のオブジェクトに渡し、そのオブジェクトがこのポインターを使用して IsCallerInRole を呼び出した場合に発生することがあります。ObjectContext ポインターは、元々それを取得したオブジェクトのコンテキストの外部では有効ではありません。

解説(Remarks)

このメソッドを使用して、現在実行中のメソッドの直接の呼び出し元が特定のロールに関連付けられているかどうかを判定します。ロールとは、特定の COM+ アプリケーション内のすべてのコンポーネントに対して特定のアクセス権限を持つユーザーまたはユーザーグループを表すシンボリックな名前です。開発者はコンポーネントの作成時にロールを定義し、ロールはデプロイ時に個々のユーザーまたはグループにマッピングされます。

IsCallerInRole は、現在実行中のメソッドの直接の呼び出し元にのみ適用されます。(直接の呼び出し元とは、現在のサーバープロセスを呼び出しているプロセスです。ベースクライアントプロセスの場合もサーバープロセスの場合もあります。)IsCallerInRole は、現在のメソッドが呼び出された呼び出しシーケンスを開始したプロセスや、そのシーケンス内の他の呼び出し元には適用されません。

IsCallerInRole は、それを呼び出したオブジェクトがクライアントのプロセス内で実行されている場合に TRUE を返すため、IsCallerInRole を呼び出す前に IsSecurityEnabled を呼び出すことをお勧めします。セキュリティが有効になっていない場合、IsCallerInRole は正確な結果を返しません。

vtbl 15 HRESULT get_Count(INT* plCount)

名前付きコンテキストオブジェクトプロパティの数を取得します。

plCountINT*out名前付きコンテキストオブジェクトプロパティの数。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL、および S_OK を返すことがあります。

vtbl 16 HRESULT get_Item(LPWSTR name, VARIANT* pItem)

名前付きプロパティを取得します。

nameLPWSTRin取得するプロパティの名前。
pItemVARIANT*out取得されたプロパティへの参照。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL、および S_OK を返すことがあります。

vtbl 17 HRESULT get__NewEnum(IUnknown** ppEnum)

名前付きコンテキストオブジェクトプロパティの列挙子を取得します。

ppEnumIUnknown**out返される IEnumVARIANT インターフェースへの参照。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL、および S_OK を返すことがあります。

vtbl 18 HRESULT get_Security(SecurityProperty** ppSecurityProperty)

現在のオブジェクトのコンテキストのセキュリティオブジェクトを取得します。

ppSecurityPropertySecurityProperty**out現在のオブジェクトのコンテキストのセキュリティプロパティを含む SecurityProperty インターフェースへの参照。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL、および S_OK を返すことがあります。

vtbl 19 HRESULT get_ContextInfo(ContextInfo** ppContextInfo)

現在のオブジェクトのコンテキストのコンテキスト情報オブジェクトを取得します。

ppContextInfoContextInfo**outコンテキスト情報を含む ContextInfo インターフェースへの参照。

戻り値

このメソッドは、標準の戻り値 E_INVALIDARGE_OUTOFMEMORYE_UNEXPECTEDE_FAIL、および S_OK を返すことがあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ObjectContext "{74C08646-CEDB-11CF-8B49-00AA00B8A790}"
#usecom global ObjectContext IID_ObjectContext "{}"
#comfunc global ObjectContext_CreateInstance     7 wstr,var
#comfunc global ObjectContext_SetComplete        8
#comfunc global ObjectContext_SetAbort           9
#comfunc global ObjectContext_EnableCommit       10
#comfunc global ObjectContext_DisableCommit      11
#comfunc global ObjectContext_IsInTransaction    12 var
#comfunc global ObjectContext_IsSecurityEnabled  13 var
#comfunc global ObjectContext_IsCallerInRole     14 wstr,var
#comfunc global ObjectContext_get_Count          15 var
#comfunc global ObjectContext_get_Item           16 wstr,var
#comfunc global ObjectContext_get__NewEnum       17 sptr
#comfunc global ObjectContext_get_Security       18 sptr
#comfunc global ObjectContext_get_ContextInfo    19 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。