Decremented Blog

プログラミング、釣り、工作など、ジャンルを特に定めず、適当に書かれたブログです。

COMオブジェクトのアクセスでハマる

2007-12-28 15:07:44 | プログラミング・開発
UPnP APIを操作しようとプログラムを書いていて、単純な間違いで2時間くらいハマりました・・・

IUPnPDeviceFinder::FindByType を使うと、デバイスリストとして IUPnPDevices インターフェースが取得できます。
IUPnPDevices の中身を取得するためには、IUPnPDevices::__NewEnumを使い、 IEnumVARIANT か IEnumUnknown を取得して使います。

私は

IEnumUnknown *pEnumUnknown = NULL;
pUPnPDevices->get__NewEnum((LPUNKNOWN *)&pEnumUnknown);
pEnumUnknown->Next(1, &pDevice, &recv);

と言うコードを書いたのですが、最後のNext()が正常に動作しません。
よく考えたら当たり前で、_NewEnum は、IEnumUnknown では無く IUnknown を返すのだから、次のようにコーディングする必要がありました。

IUnknown *pUnknown=NULL;
pUPnPDevices->get__NewEnum((LPUNKNOWN *)&pUnknown);
IEnumUnknown *pEnumUnknown=NULL;
pUnknown->QueryInterface(IID_IEnumUnknown, (void **)&pEnumUnknown);
pEnumUnknown->Next(1, &pDevice, &recv);

このように、IUnknown から QueryInterface して、IEnumUnknown を取得する必要があります。
よく考えれば、当たり前なんですが・・・

最新の画像もっと見る