社本@元ネオニート Blog

社本@元ネオニート (元々ワック) のいたずら書き (for Programmers)

AILight Banner
AILight Blog

プロフィール

社本@元ネオニート Blog
働いたら負けかなと思っていたのですが。。とうとう働き始めました。アメリカのシアトル・エリアにある企業向けのバックアップソフトを開発している会社です。日本人は私だけ。なんとか。。やっていけてるようです。

目次

Blog 利用状況

記事分類

過去の記事

タグ

QISearch - COM/SHLWAPI

SHLWAPIにあるQISearch APIを使用すると、IUnknown::QueryInterfaceを
簡単に実装することができます。
ATLを使ったほうが柔軟性も高まっていいと思いますが、簡単にサンプル程度で
COMオブジェクトを作るような場合には、便利かもしれません。

---
class CHoge : public IHoge
{
protected:
 typedef CHoge  thisClass;

public:
 CHoge()
 {
  m_dwRef = 1;
 }

// IUnknown
public:
 STDMETHOD(QueryInterface)(REFIID riid,  void **ppv)
 {
  static const QITAB qitab[] =
  {
   QITABENT(CHoge, IHoge),
   QITABENT(CHoge, IUnknown),
   { 0 },
  };

  // shlwapi.dll version 5.0 or later
  return ::QISearch(this, qitab, riid, ppv);
 }
 STDMETHOD_(ULONG, AddRef)()
 {
  return ::InterlockedIncrement(&m_dwRef);
 }
 STDMETHOD_(ULONG, Release)()
 {
  long dwRef = ::InterlockedDecrement(&m_dwRef);
  if (!dwRef)
  {
   delete this;
  }
  return dwRef;
 }
        
// IHoge
public:
 STDMETHOD(Hage)()
 {
  return S_OK;
 }

protected:
 long m_dwRef;
};
---


■QISearch Function - MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/others/qisearch.asp

投稿日時 : 2006年6月29日 21:21


コメントを追加

#  re: QISearch - COM/SHLWAPI 2006年6月30日 10:41 とっちゃん

致命的ななバグを見つけました。m_dwRef が初期化されていません!

このままではメモリーリークしてしまいますw

#  re: QISearch - COM/SHLWAPI 2006年6月30日 10:44 とっちゃん

あ、肝心なほう書くの忘れた(^^;

いくつかインターフェース持ってる場合は楽そうですね<QISearch

SHLWAPI 5.0 って...IE5でしたっけ?

#  re: QISearch - COM/SHLWAPI 2006年6月30日 18:18 社本@ワック

> 致命的ななバグを見つけました。m_dwRef が初期化されていません!

あ。修正しときましたw

> SHLWAPI 5.0 って...IE5でしたっけ?

そうです。shdocvw.dllのバージョンと同一です。
タイトル
名前
URL
コメント