イベントの登録
次のコード例は、単純なイベント ハンドラーの実装、メイン TAPI イベント インターフェイスの登録、イベント フィルターの設定、および呼び出し通知の登録を示しています。
次に示すイベント ハンドラーは、要件ではなく例です。 主な目標は、イベントを受け取るスレッドが、別のスレッドに作業を渡す前に最小限の処理を実行できるようにすることです。 これにより、イベント の負荷が高い状況でイベント ハンドラーがパフォーマンスの問題になるのを防ぐことができます。
このコード例を使用する前に、「 TAPI の初期化 」および「 アドレスの選択」で操作を実行する必要があります。
Note
この例には、実稼働コードに適したエラー チェックとリリースはありません。
//
// Example 1: Implement a simple event handler.
//
HRESULT STDMETHODCALLTYPE
CTAPIEventNotification::Event(
TAPI_EVENT TapiEvent,
IDispatch * pEvent
)
{
// AddRef the event so it does not go away.
pEvent->AddRef();
// Post a message to our own UI thread.
BOOL bMessage;
bMessage = PostMessage(
ghDlg,
WM_PRIVATETAPIEVENT,
(WPARAM) TapiEvent,
(LPARAM) pEvent
);
// If (bMessage == 0) process the error here.
return S_OK;
}
//
// Example 2: Register the event interface.
//
long gulAdvise; // Globally declared
IConnectionPointContainer * pCPC;
IConnectionPoint * pCP;
IUnknown * pUnk;
// Get the connection point container interface pointer from the TAPI object.
hr = gpTapi->QueryInterface(
IID_IConnectionPointContainer,
(void **)&pCPC
);
// If ( hr != S_OK O) process the error here.
// Get the ITTAPIEventNotification interface pointer from the container.
hr = pCPC->FindConnectionPoint(
IID_ITTAPIEventNotification,
&pCP
);
// If ( hr != S_OK O) process the error here.
pCPC->Release();
// Create a private event notification object.
CTAPIEventNotification* pTapiEventNotification = new CTAPIEventNotification;
hr = pTapiEventNotification->QueryInterface(
IID_IUnknown,
(void **)&pUnk
);
// If ( hr != S_OK O) process the error here.
// Call the advise method to give TAPI the IUnknown pointer for the event handler.
hr = pCP->Advise(
pUnk,
(ULONG *)&gulAdvise
);
// If ( hr != S_OK O) process the error here.
pCP->Release();
//
// Example 3: Set the event filter.
//
// Assume we are interested only in call-related events.
hr = gpTapi->put_EventFilter(
TE_CALLNOTIFICATION | TE_CALLSTATE | TE_CALLMEDIA
);
// If ( hr != S_OK O) process the error here.
//
// Example 4: Register an address with TAPI
// for call notifications. Assume we are interested
// in video and audio calls, and that pAddress
// is a pointer to the ITAddress interface of
// an address that can handle both media types.
long glRegister; // Globally declared
hr = gpTapi->RegisterCallNotifications(
pAddress,
VARIANT_TRUE, // monitor privileges
VARIANT_TRUE, // owner privileges
TAPIMEDIATYPE_AUDIO|TAPIMEDIATYPE_VIDEO,
gulAdvise, // As returned by Advise
&glRegister
);
// If ( hr != S_OK O) process the error here.
関連トピック