00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00026 #ifndef OW32_OleStr_h
00027 #define OW32_OleStr_h
00028
00029 namespace OW32
00030 {
00031
00033 class OW32_LIB_EXPORT COleStr
00034 {
00035 private:
00036 LPOLESTR m_data;
00037
00038
00039 void _Copy(LPCWSTR str)
00040 {
00041 ::CoTaskMemFree(m_data);
00042 int size = (wcslen(str)+1)*sizeof(OLECHAR);
00043 m_data = (LPOLESTR)::CoTaskMemAlloc(size);
00044 memcpy(m_data, str, size);
00045 }
00046
00047
00048 void _Copy(LPCSTR str)
00049 {
00050 USES_CONVERSION;
00051 _Copy(A2CW(str));
00052 }
00053
00054 public:
00056 COleStr() : m_data(0) { }
00057
00061 COleStr(LPCWSTR str) : m_data(0) { _Copy(str); }
00065 COleStr(LPCSTR str) : m_data(0) { _Copy(str); }
00069 COleStr(const COleStr &str) : m_data(0) { _Copy(str.m_data); }
00070
00072 ~COleStr() { ::CoTaskMemFree(m_data); }
00073
00075 unsigned int Length() const { return m_data ? wcslen(m_data) : 0; }
00076
00078 void Attach(LPOLESTR lpOle)
00079 {
00080 if (m_data) ::CoTaskMemFree(m_data);
00081 m_data = lpOle;
00082 }
00083
00085 LPOLESTR Detach()
00086 {
00087 LPOLESTR data = m_data;
00088 m_data = NULL;
00089 return data;
00090 }
00091
00093 LPOLESTR Copy() const
00094 {
00095 LPOLESTR data;
00096 int size = (wcslen(m_data)+1)*sizeof(OLECHAR);
00097 data = (LPOLESTR)::CoTaskMemAlloc(size);
00098 if (data)
00099 {
00100 memcpy(data, m_data, size);
00101 }
00102 return data;
00103 }
00104
00108 COleStr& operator=(const COleStr &str)
00109 {
00110 _Copy(str.m_data);
00111 return *this;
00112 }
00113
00117 COleStr& operator=(const LPCWSTR &str)
00118 {
00119 _Copy(str);
00120 return *this;
00121 }
00122
00126 COleStr& operator=(const LPCSTR &str)
00127 {
00128 _Copy(str);
00129 return *this;
00130 }
00131
00133 LPOLESTR* operator&()
00134 {
00135 _ASSERT(!m_data);
00136 return &m_data;
00137 }
00138
00140 operator LPOLESTR() const { return m_data; }
00141
00143 bool operator!() const { return m_data == NULL; }
00145 operator bool() const { return m_data != NULL; }
00146 };
00147
00148 }
00149
00150 #endif // OW32_OleStr_h