ITPhoneEvent
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ITPhoneEvent インターフェイスは、発生した電話イベントの説明を取得するメソッドを提供します。
メソッド 9
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_Phone メソッドは、このイベントを発生させた電話オブジェクトの ITPhone インターフェイスへのポインターを返します。
| ppPhone | ITPhone** | out | ITPhone インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
TAPI は、ITPhoneEvent::get_Phone が返す ITPhone インターフェイスに対して AddRef メソッドを呼び出します。アプリケーションは、 ITPhone インターフェイスに関連付けられたリソースを解放するために、そのインターフェイスに対して Release を呼び出す必要があります。
get_Event メソッドは、発生した電話イベントの種類を指定する PHONE_EVENT 値を返します。
| pEvent | PHONE_EVENT* | out | イベントの PHONE_EVENT 記述子。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_ButtonState メソッドは、ボタンが遷移した状態を指定する PHONE_BUTTON_STATE 値を返します。この情報は、ITPhoneEvent::get_Event メソッドが PE_BUTTON を返す場合にのみ利用できます。
| pState | PHONE_BUTTON_STATE* | out | ボタンの現在の状態を示す PHONE_BUTTON_STATE 記述子へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドが用意されているのは、一部のボタンが PBS_DOWN ボタン状態をサポートせず、代わりに一時的に PBS_PRESSED を報告するためです。さらに、PBS_DOWN をサポートする電話であっても、ボタンが短時間しか押されず、 ITPhone::get_ButtonState メソッドの呼び出しが十分に速く実行されない場合、アプリケーションはボタンの押下を取りこぼす可能性があります。
get_HookSwitchState メソッドは、フックスイッチが遷移した状態を指定する PHONE_HOOK_SWITCH_STATE 値を返します。この情報は、ITPhoneEvent::get_Event メソッドが PE_HOOKSWITCH を返す場合にのみ利用できます。
| pState | PHONE_HOOK_SWITCH_STATE* | out | 現在のフックスイッチ状態を示す PHONE_HOOK_SWITCH_STATE 記述子へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_HookSwitchDevice メソッドは、状態が変化したフックスイッチデバイスを指定する PHONE_HOOK_SWITCH_DEVICE 値を返します。この情報は、ITPhoneEvent::get_Event メソッドが PE_HOOKSWITCH を返す場合にのみ利用できます。
| pDevice | PHONE_HOOK_SWITCH_DEVICE* | out | フックスイッチ状態が変化したデバイスの種類を示す PHONE_HOOK_SWITCH_DEVICE 記述子へのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_RingMode メソッドは、電話が遷移した呼び出し音モードを指定する long 値を返します。この情報は、ITPhoneEvent::get_Event メソッドが PE_RINGMODE を返す場合にのみ利用できます。
| plRingMode | INT* | out | 呼び出し音モード。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_ButtonLampId メソッドは、どのボタンまたはランプがイベントを発生させたかを示す long 値を返します。この情報は、ITPhoneEvent::get_Event が PE_LAMPMODE または PE_BUTTON を返す場合にのみ利用できます。
| plButtonLampId | INT* | out | ボタンまたはランプの ID。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_NumberGathered メソッドは、収集された電話番号を指定する BSTR 値を返します。この情報は、ITPhoneEvent::get_Event メソッドが PE_NUMBERGATHERED を返す場合にのみ利用できます。
| ppNumber | LPWSTR* | out | 収集された電話番号。BSTR は SysAllocString を使用して割り当てられ、クライアントが解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
get_Call メソッドは、イベントに関与する通話オブジェクトの ITCallInfo インターフェイスへのポインターを返します。
| ppCallInfo | ITCallInfo** | out | ITCallInfo インターフェイスへのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
| 値 | 意味 |
|---|---|
| メソッドが成功しました。 | |
| 操作を実行するためのメモリが不足しています。 | |
| ppCallInfo パラメーターが有効なポインターではありません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ITPhoneEvent "{8F942DD8-64ED-4AAF-A77D-B23DB0837EAD}" #usecom global ITPhoneEvent IID_ITPhoneEvent "{}" #comfunc global ITPhoneEvent_get_Phone 7 sptr #comfunc global ITPhoneEvent_get_Event 8 var #comfunc global ITPhoneEvent_get_ButtonState 9 var #comfunc global ITPhoneEvent_get_HookSwitchState 10 var #comfunc global ITPhoneEvent_get_HookSwitchDevice 11 var #comfunc global ITPhoneEvent_get_RingMode 12 var #comfunc global ITPhoneEvent_get_ButtonLampId 13 var #comfunc global ITPhoneEvent_get_NumberGathered 14 var #comfunc global ITPhoneEvent_get_Call 15 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ITPhoneEvent "{8F942DD8-64ED-4AAF-A77D-B23DB0837EAD}" #usecom global ITPhoneEvent IID_ITPhoneEvent "{}" #comfunc global ITPhoneEvent_get_Phone 7 sptr #comfunc global ITPhoneEvent_get_Event 8 sptr #comfunc global ITPhoneEvent_get_ButtonState 9 sptr #comfunc global ITPhoneEvent_get_HookSwitchState 10 sptr #comfunc global ITPhoneEvent_get_HookSwitchDevice 11 sptr #comfunc global ITPhoneEvent_get_RingMode 12 sptr #comfunc global ITPhoneEvent_get_ButtonLampId 13 sptr #comfunc global ITPhoneEvent_get_NumberGathered 14 sptr #comfunc global ITPhoneEvent_get_Call 15 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。