IGlobalOptions
COM公式ドキュメント
IGlobalOptions (objidlbase.h) インターフェースは、Component Object Model (COM) ランタイムのグローバルプロパティを設定および照会します。
解説(Remarks)
COM ランタイムの以下のグローバルプロパティを、このインターフェースで設定および照会できます。
| プロパティ | 値 |
|---|---|
| COMGLB_APPID | プロセスの AppID です。 Windows XP でサポートされる唯一のプロパティです。 |
| COMGLB_EXCEPTION_HANDLING |
COMGLB_EXCEPTION_HANDLING プロパティに指定可能な値は次のとおりです。
注意 COM ランタイムの例外処理を無効化しても、プロセス内に例外を処理する別のアプリケーションレベルの例外ハンドラーが存在する場合、例外が WER に伝播しないことがあります。
|
| COMGLB_RPC_THREADPOOL_SETTING |
Set メソッドにおける COMGLB_RPC_THREADPOOL_SETTING プロパティに指定可能な値は次のとおりです。
COMGLB_RPC_THREADPOOL_SETTING プロパティを使用して、RPC スレッドプールの動作を変更できます。既定の動作を変更すると RPC が追加のスレッドを使用するため、パフォーマンスの低下を招きます。したがって、この設定を変更する際は注意が必要です。この設定はアプリケーションの互換性を確保する目的でのみ変更することを推奨します。 注意 このプロパティは、プロセス内で COM が初期化された直後に設定する必要があります。COM が RPC チャネルを初期化する操作 (たとえばオブジェクト参照のマーシャリングやアンマーシャリング) を実行した後にこのプロパティを設定すると、Set メソッドは失敗します。
|
| COMGLB_RO_SETTINGS |
COMGLB_RO_SETTINGS プロパティに指定可能な値は次のとおりです。
|
| COMGLB_UNMARSHALING_POLICY |
COMGLB_UNMARSHALING_POLICY プロパティに指定可能な値は次のとおりです。
|
インバウンド COM 呼び出しの実行中に発生する可能性のあるクラッシュやその他の例外を検出するアプリケーション (たとえばローカルサーバーへの呼び出しや IDropTarget::Drop メソッドの実行時) では、例外をキャッチする COM の動作を無効化するために COMGLB_EXCEPTION_HANDLING を COMGLB_EXCEPTION_DONOT_HANDLE に設定することが重要です。これを行わないと、プロセスの状態が破損する可能性があります。たとえば、これらの例外がスローされた際に保持されていたロックが放棄され、プロセスが一貫性のない状態に陥る可能性があります。
そのようなアプリケーションはすべて、起動時にこのコードを実行する必要があります。
IGlobalOptions *pGlobalOptions;
hr = CoCreateInstance(CLSID_GlobalOptions, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pGlobalOptions));
if (SUCCEEDED(hr))
{
hr = pGlobalOptions->Set(COMGLB_EXCEPTION_HANDLING, COMGLB_EXCEPTION_DONOT_HANDLE);
pGlobalOptions->Release();
}
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IGlobalOptions::Set (objidlbase.h) メソッドは、指定した COM ランタイムのグローバルプロパティを設定します。
| dwProperty | GLOBALOPT_PROPERTIES | in | COM ランタイムのグローバルプロパティです。このメソッドで設定できるプロパティの一覧については、IGlobalOptions を参照してください。 |
| dwValue | UINT_PTR | in | プロパティの値です。 重要 COMGLB_APPID プロパティの場合、このパラメーターには APPID GUID へのポインターを指定する必要があります。
|
戻り値
プロパティが正常に設定された場合、戻り値は S_OK です。
IGlobalOptions::Query (objidlbase.h) メソッドは、指定した COM ランタイムのグローバルプロパティを照会します。
| dwProperty | GLOBALOPT_PROPERTIES | in | COM ランタイムのグローバルプロパティです。このメソッドで設定できるプロパティの一覧については、IGlobalOptions を参照してください。 |
| pdwValue | UINT_PTR* | out | プロパティの値です。 重要 COMGLB_APPID プロパティの場合、このパラメーターは AppID GUID へのポインターを受け取ります。
|
戻り値
プロパティが正常に照会された場合、戻り値は S_OK です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IGlobalOptions "{0000015B-0000-0000-C000-000000000046}" #usecom global IGlobalOptions IID_IGlobalOptions "{}" #comfunc global IGlobalOptions_Set 3 int,sptr #comfunc global IGlobalOptions_Query 4 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IGlobalOptions "{0000015B-0000-0000-C000-000000000046}" #usecom global IGlobalOptions IID_IGlobalOptions "{}" #comfunc global IGlobalOptions_Set 3 int,sptr #comfunc global IGlobalOptions_Query 4 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。