]> git.saurik.com Git - wxWidgets.git/commitdiff
automatically initialize m_cRef to 0 (patch 575011 + more)
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 9 Jul 2002 11:52:11 +0000 (11:52 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 9 Jul 2002 11:52:11 +0000 (11:52 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16115 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/ole/oleutils.h
src/msw/ole/dataobj.cpp
src/msw/ole/dropsrc.cpp
src/msw/ole/droptgt.cpp

index 737939078a26c5002c4e281dbbd3375e723e8aec..1d19f4f763cc010e23a8456546334e470f73f2df 100644 (file)
 #endif
 
 #include "wx/defs.h"
+
 #if wxUSE_NORLANDER_HEADERS
-#include <ole2.h>
+    #include <ole2.h>
 #endif
+
 // ============================================================================
 // General purpose functions and macros
 // ============================================================================
@@ -39,7 +41,7 @@ inline void ReleaseInterface(IUnknown *pIUnk)
 #define   RELEASE_AND_NULL(p)   if ( (p) != NULL ) { p->Release(); p = NULL; };
 
 // return TRUE if the iid is in the array
-bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
+extern bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
 
 // ============================================================================
 // IUnknown implementation helpers
@@ -51,20 +53,36 @@ bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
    implementation is quite enough.
 
    Usage is trivial: here is all you should have
-   1) DECLARE_IUNKNOWN_METHOS in your (IUnknown derived!) class declaration
+   1) DECLARE_IUNKNOWN_METHODS in your (IUnknown derived!) class declaration
    2) BEGIN/END_IID_TABLE with ADD_IID in between for all interfaces you
       support (at least all for which you intent to return 'this' from QI,
       i.e. you should derive from IFoo if you have ADD_IID(Foo)) somewhere else
-   3) IMPLEMENT_IUNKNOWN_METHOS somewhere also
+   3) IMPLEMENT_IUNKNOWN_METHODS somewhere also
 
    These macros are quite simple: AddRef and Release are trivial and QI does
    lookup in a static member array of IIDs and returns 'this' if it founds
    the requested interface in it or E_NOINTERFACE if not.
  */
 
+/*
+  wxAutoULong: this class is used for automatically initalising m_cRef to 0
+*/
+class wxAutoULong
+{
+public:
+    wxAutoULong(ULONG value = 0) : m_Value(value) { }
+
+    operator ULONG&() { return m_Value; }
+    ULONG& operator=(ULONG value) { return m_Value = value; }
+
+private:
+    ULONG m_Value;
+};
+
 // declare the methods and the member variable containing reference count
 // you must also define the ms_aIids array somewhere with BEGIN_IID_TABLE
 // and friends (see below)
+
 #define   DECLARE_IUNKNOWN_METHODS                                            \
   public:                                                                     \
     STDMETHODIMP          QueryInterface(REFIID, void **);                    \
@@ -72,7 +90,7 @@ bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
     STDMETHODIMP_(ULONG)  Release();                                          \
   private:                                                                    \
     static  const IID    *ms_aIids[];                                         \
-    ULONG                 m_cRef
+    wxAutoULong           m_cRef
 
 // macros for declaring supported interfaces
 // NB: you should write ADD_INTERFACE(Foo) and not ADD_INTERFACE(IID_IFoo)!
index 309a9990596079461ff513f137341057cfd0e7cb..927950ca11713ff6b71296650cdff1b091d0dfad 100644 (file)
@@ -177,7 +177,6 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIEnumFORMATETC)
 
 wxIEnumFORMATETC::wxIEnumFORMATETC(const wxDataFormat *formats, ULONG nCount)
 {
-    m_cRef = 0;
     m_nCurrent = 0;
     m_nCount = nCount;
     m_formats = new CLIPFORMAT[nCount];
@@ -268,7 +267,6 @@ IMPLEMENT_IUNKNOWN_METHODS(wxIDataObject)
 
 wxIDataObject::wxIDataObject(wxDataObject *pDataObject)
 {
-    m_cRef = 0;
     m_pDataObject = pDataObject;
     m_mustDelete = FALSE;
 }
index 6aae42c5d549cb91c1da54caf4257a5131128b64..8f0ab7e6f409e1c9e2d099d29874b37d274cd63c 100644 (file)
@@ -93,7 +93,6 @@ wxIDropSource::wxIDropSource(wxDropSource *pDropSource)
 
   m_pDropSource = pDropSource;
   m_grfInitKeyState = 0;
-  m_cRef = 0;
 }
 
 // Name    : wxIDropSource::QueryContinueDrag
index d1e4a97b114619dc7861f5af2d8353a27502d2b1..c24d9d40085877d5515372bb3a61b1e25457b474 100644 (file)
@@ -113,7 +113,6 @@ DWORD wxIDropTarget::GetDropEffect(DWORD flags)
 
 wxIDropTarget::wxIDropTarget(wxDropTarget *pTarget)
 {
-  m_cRef         = 0;
   m_pTarget      = pTarget;
   m_pIDataObject = NULL;
 }