00001 #ifndef __COMDEF_H
00002 #define __COMDEF_H
00003
00004
00005
00006 class WvComSmartBase
00007 {
00008 public:
00009 void *p;
00010 };
00011
00012
00013
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
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