WvStreams
comdef.h
00001 #ifndef __COMDEF_H
00002 #define __COMDEF_H
00003 
00004 //#warning "Using hideously broken fake comdef.h"
00005 
00006 class WvComSmartBase
00007 {
00008 public:
00009     void *p;
00010 };
00011 
00012 
00013 // FIXME: completely untested and random
00014 template <typename I>
00015 class WvComSmart : public WvComSmartBase
00016 {
00017 public:
00018     WvComSmart(IUnknown *ptr = 0, bool addref = false)
00019     {
00020         p = ptr;
00021     }
00022     
00023     WvComSmart(const WvComSmartBase &b)
00024     { 
00025         p = b.p;
00026     }
00027     
00028     bool operator== (const void *b) const
00029     {
00030         return p == b;
00031     }
00032     
00033     bool operator!= (const void *b) const
00034     {
00035         return p != b;
00036     }
00037     
00038     I *operator-> ()
00039     {
00040         return (I *)p;
00041     }
00042     
00043     operator I* ()
00044     {
00045         return (I *)p;
00046     }
00047     
00048     I **operator& ()
00049     {
00050         return (I **)&p;
00051     }
00052 };
00053 
00054 #define _COM_SMARTPTR_TYPEDEF(x, y) typedef WvComSmart<x> x##Ptr;
00055 
00056 // FIXME
00057 extern CLSID xblah;
00058 _COM_SMARTPTR_TYPEDEF(IUnknown, xblah);
00059 _COM_SMARTPTR_TYPEDEF(IDispatch, xblah);
00060 
00061 class _com_error
00062 {
00063 public:
00064     const char *ErrorMessage();
00065 };
00066 
00067 #define __uuidof(x) (xblah)
00068 
00069 #endif // _COMDEF_H