WvStreams
|
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