Mobile Broadband APIのドキュメントには、次のように書かれています。
次の手順では、通知を登録する方法について説明します。
1. IMbnInterfaceManager > オブジェクトで QueryInterface を呼び出して、IConnectionPointContainer インターフェイスを取得します。
2.返されたインターフェイスで FindConnectionPoint を呼び出し、IID_IMbnPinEvents を riid に渡します。
3. 返された接続ポイントで Advise を呼び出し、IMbnPinEvents を pUnk に実装する > オブジェクト上の IUnknown インターフェイスへのポインターを渡します。通知は、手順 2 で返された接続ポイントで Unadvise を呼び出すことによって終了できます。
最初の 3 つの手順を実行するコードがいくつかあり、MBN イベントに正常に登録されます。ただし、これらのイベントの受信から一時的に登録を解除する必要があります。
そのため、COM 例外で終了した最初の試行を 2 回行った後、次のコードを試しました (try/catch ブロックを使用)。
//First get the notifications
public void RegisterEvent(object iUnk, Guid guid, out uint storedTag)
{
IConnectionPoint icp = null;
Guid curGuid = guid;
storedTag = 0;
if ((curGuid == typeof(IMbnInterfaceManagerEvents).GUID) )
{
// For this event, the connection point is defined on the interface manager object
m_InterfaceManagerCPC.FindConnectionPoint(ref curGuid, out icp);
// Call Advise on the connection point to register
icp.Advise(iUnk, out storedTag);
//Save the IConnectionPoint object
interfaceManagerCP = icp;
}
//Now deregister the events
public void DeregisterEvent(Guid guid, uint storedTag)
{
IConnectionPoint icp = null;
Guid curGuid = guid;
// Find the appropriate connection point to call Unadvise on
if ((curGuid == typeof(IMbnInterfaceManagerEvents).GUID) )
{
// Call Unadvise on the saved connection point to de-register
interfaceManagerCP.Unadvise(storedTag);
}
このコードを実行すると、MBN からエラーや例外が発生しません。ただし、イベント ハンドラーは登録解除されません。ログ ファイルで、MBN イベントが到着して処理されていることを確認できます。
私が欠けているものを誰か教えてもらえますか?ありがとうございました。