]>
git.saurik.com Git - wxWidgets.git/blob - src/msw/ole/oleutils.cpp
   1 /////////////////////////////////////////////////////////////////////////////// 
   2 // Name:        ole/oleutils.cpp 
   3 // Purpose:     implementation of OLE helper functions 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 
   9 // Licence:     wxWindows licence 
  10 /////////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 // ---------------------------------------------------------------------------- 
  18 // ---------------------------------------------------------------------------- 
  20 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  21 #pragma implementation "oleutils.h" 
  24 // For compilers that support precompilation, includes "wx.h". 
  25 #include "wx/wxprec.h" 
  27 #if defined(__BORLANDC__) 
  38 #include "wx/msw/private.h" 
  50 #include  "wx/msw/ole/uuid.h" 
  53 #include  "wx/msw/ole/oleutils.h" 
  55 #if defined(__VISUALC__) && (__VISUALC__ > 1000) 
  59 // ============================================================================ 
  61 // ============================================================================ 
  63 // return true if the iid is in the array 
  64 bool IsIidFromList(REFIID riid
, const IID 
*aIids
[], size_t nCount
) 
  66   for ( size_t i 
= 0; i 
< nCount
; i
++ ) { 
  67     if ( riid 
== *aIids
[i
] ) 
  76 // ---------------------------------------------------------------------------- 
  78 // ---------------------------------------------------------------------------- 
  80 #if defined(__WXDEBUG__) && ( ( defined(__VISUALC__) && (__VISUALC__ > 1000) ) || defined(__MWERKS__) ) 
  81 static wxString 
GetIidName(REFIID riid
) 
  83   // an association between symbolic name and numeric value of an IID 
  89   // construct the table containing all known interfaces 
  90   #define ADD_KNOWN_IID(name) { &IID_I##name, _T(#name) } 
  92   static const KNOWN_IID aKnownIids
[] = { 
  93     ADD_KNOWN_IID(AdviseSink
), 
  94     ADD_KNOWN_IID(AdviseSink2
), 
  95     ADD_KNOWN_IID(BindCtx
), 
  96     ADD_KNOWN_IID(ClassFactory
), 
  97 #if ( !defined( __VISUALC__) || (__VISUALC__!=1010) ) && !defined(__MWERKS__) 
  98     ADD_KNOWN_IID(ContinueCallback
), 
  99     ADD_KNOWN_IID(EnumOleDocumentViews
), 
 100     ADD_KNOWN_IID(OleCommandTarget
), 
 101     ADD_KNOWN_IID(OleDocument
), 
 102     ADD_KNOWN_IID(OleDocumentSite
), 
 103     ADD_KNOWN_IID(OleDocumentView
), 
 104     ADD_KNOWN_IID(Print
), 
 106     ADD_KNOWN_IID(DataAdviseHolder
), 
 107     ADD_KNOWN_IID(DataObject
), 
 108     ADD_KNOWN_IID(Debug
), 
 109     ADD_KNOWN_IID(DebugStream
), 
 110     ADD_KNOWN_IID(DfReserved1
), 
 111     ADD_KNOWN_IID(DfReserved2
), 
 112     ADD_KNOWN_IID(DfReserved3
), 
 113     ADD_KNOWN_IID(Dispatch
), 
 114     ADD_KNOWN_IID(DropSource
), 
 115     ADD_KNOWN_IID(DropTarget
), 
 116     ADD_KNOWN_IID(EnumCallback
), 
 117     ADD_KNOWN_IID(EnumFORMATETC
), 
 118     ADD_KNOWN_IID(EnumGeneric
), 
 119     ADD_KNOWN_IID(EnumHolder
), 
 120     ADD_KNOWN_IID(EnumMoniker
), 
 121     ADD_KNOWN_IID(EnumOLEVERB
), 
 122     ADD_KNOWN_IID(EnumSTATDATA
), 
 123     ADD_KNOWN_IID(EnumSTATSTG
), 
 124     ADD_KNOWN_IID(EnumString
), 
 125     ADD_KNOWN_IID(EnumUnknown
), 
 126     ADD_KNOWN_IID(EnumVARIANT
), 
 127     ADD_KNOWN_IID(ExternalConnection
), 
 128     ADD_KNOWN_IID(InternalMoniker
), 
 129     ADD_KNOWN_IID(LockBytes
), 
 130     ADD_KNOWN_IID(Malloc
), 
 131     ADD_KNOWN_IID(Marshal
), 
 132     ADD_KNOWN_IID(MessageFilter
), 
 133     ADD_KNOWN_IID(Moniker
), 
 134     ADD_KNOWN_IID(OleAdviseHolder
), 
 135     ADD_KNOWN_IID(OleCache
), 
 136     ADD_KNOWN_IID(OleCache2
), 
 137     ADD_KNOWN_IID(OleCacheControl
), 
 138     ADD_KNOWN_IID(OleClientSite
), 
 139     ADD_KNOWN_IID(OleContainer
), 
 140     ADD_KNOWN_IID(OleInPlaceActiveObject
), 
 141     ADD_KNOWN_IID(OleInPlaceFrame
), 
 142     ADD_KNOWN_IID(OleInPlaceObject
), 
 143     ADD_KNOWN_IID(OleInPlaceSite
), 
 144     ADD_KNOWN_IID(OleInPlaceUIWindow
), 
 145     ADD_KNOWN_IID(OleItemContainer
), 
 146     ADD_KNOWN_IID(OleLink
), 
 147     ADD_KNOWN_IID(OleManager
), 
 148     ADD_KNOWN_IID(OleObject
), 
 149     ADD_KNOWN_IID(OlePresObj
), 
 150     ADD_KNOWN_IID(OleWindow
), 
 151     ADD_KNOWN_IID(PSFactory
), 
 152     ADD_KNOWN_IID(ParseDisplayName
), 
 153     ADD_KNOWN_IID(Persist
), 
 154     ADD_KNOWN_IID(PersistFile
), 
 155     ADD_KNOWN_IID(PersistStorage
), 
 156     ADD_KNOWN_IID(PersistStream
), 
 157     ADD_KNOWN_IID(ProxyManager
), 
 158     ADD_KNOWN_IID(RootStorage
), 
 159     ADD_KNOWN_IID(RpcChannel
), 
 160     ADD_KNOWN_IID(RpcProxy
), 
 161     ADD_KNOWN_IID(RpcStub
), 
 162     ADD_KNOWN_IID(RunnableObject
), 
 163     ADD_KNOWN_IID(RunningObjectTable
), 
 164     ADD_KNOWN_IID(StdMarshalInfo
), 
 165     ADD_KNOWN_IID(Storage
), 
 166     ADD_KNOWN_IID(Stream
), 
 167     ADD_KNOWN_IID(StubManager
), 
 168     ADD_KNOWN_IID(Unknown
), 
 169     ADD_KNOWN_IID(ViewObject
), 
 170     ADD_KNOWN_IID(ViewObject2
), 
 173   // don't clobber preprocessor name space 
 176   // try to find the interface in the table 
 177   for ( size_t ui 
= 0; ui 
< WXSIZEOF(aKnownIids
); ui
++ ) { 
 178     if ( riid 
== *aKnownIids
[ui
].pIid 
) { 
 179       return aKnownIids
[ui
].szName
; 
 184   // unknown IID, just transform to string 
 186   return wxString((const wxChar 
*)uuid
); 
 188   return wxEmptyString
; 
 192 void wxLogQueryInterface(const wxChar 
*szInterface
, REFIID riid
) 
 194   wxLogTrace(wxTRACE_OleCalls
, wxT("%s::QueryInterface (iid = %s)"), 
 195              szInterface
, GetIidName(riid
).c_str()); 
 198 void wxLogAddRef(const wxChar 
*szInterface
, ULONG cRef
) 
 200   wxLogTrace(wxTRACE_OleCalls
, wxT("After %s::AddRef: m_cRef = %d"), szInterface
, cRef 
+ 1); 
 203 void wxLogRelease(const wxChar 
*szInterface
, ULONG cRef
) 
 205   wxLogTrace(wxTRACE_OleCalls
, wxT("After %s::Release: m_cRef = %d"), szInterface
, cRef 
- 1); 
 208 #elif defined(__WXDEBUG__) && defined(__VISUALC__) && (__VISUALC__ <= 1000) 
 211 void wxLogQueryInterface(const char *szInterface
, REFIID riid
) 
 213   wxLogTrace("%s::QueryInterface", szInterface
); 
 216 void wxLogAddRef(const char *szInterface
, ULONG cRef
) 
 218   wxLogTrace("After %s::AddRef: m_cRef = %d", szInterface
, cRef 
+ 1); 
 221 void wxLogRelease(const char *szInterface
, ULONG cRef
) 
 223   wxLogTrace("After %s::Release: m_cRef = %d", szInterface
, cRef 
- 1); 
 229   // wxUSE_DRAG_AND_DROP