comObjLibExt.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:4k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* comObjLibExt.h - VxCOM Embeded Extensions to comObjLib.h */
  2. /* Copyright (c) 2001 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01d,03jan02,nel  Remove references to T2OLE and OLE2T.
  7. 01c,09aug01,nel  Add wide string conversion.
  8. 01b,07aug01,nel  Add extra methods to VxComBSTR to allow creation from numeric
  9.                  values.
  10. 01a,23jul01,nel  created
  11. */
  12. /*
  13.   DESCRIPTION:
  14.   This file provides VxWorks specific extensions to the existing ATL like
  15.   classes defined in comObjLib.h
  16. */
  17. #ifndef __INCcomObjLibExt_h__
  18. #define __INCcomObjLibExt_h__
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. class VxComBSTR : public CComBSTR
  22.     {
  23.   public:
  24.     VxComBSTR () : CComBSTR ()
  25.         {
  26.         m_text = NULL;
  27.         }
  28.     explicit VxComBSTR (int nSize, LPCOLESTR sz = 0) : CComBSTR (nSize, sz) 
  29. {
  30. m_text = NULL;
  31. }
  32.     explicit VxComBSTR (const char * pstr) : CComBSTR (pstr) 
  33. {
  34. m_text = NULL;
  35. }
  36.     explicit VxComBSTR (LPCOLESTR psz) : CComBSTR (psz)
  37. {
  38. m_text = NULL;
  39. }
  40.     explicit VxComBSTR (const CComBSTR& src) : CComBSTR (src)
  41. {
  42. m_text = NULL;
  43. }
  44.     explicit VxComBSTR (DWORD src) : CComBSTR ()
  45.         {
  46.         m_text = NULL;
  47. *this = src;
  48.         }
  49.     explicit VxComBSTR (DOUBLE src) : CComBSTR ()
  50.         {
  51.         m_text = NULL;
  52.         *this = src;
  53.         }
  54.     ~VxComBSTR ()
  55.         {
  56.         if (m_text != NULL)
  57.     {
  58.     delete []m_text;
  59.     m_text = NULL;
  60.     }
  61.         }
  62.     
  63.     operator char * ()
  64. {
  65. char * ptr;
  66. if (m_text != NULL)
  67.     {
  68.     delete []m_text;
  69.             m_text = NULL;
  70.     }
  71.         if ((BSTR)(*this) == NULL)
  72.             {
  73.             return NULL;
  74.             }
  75. #ifdef _WIN32
  76. m_text = new char [wcslen ((BSTR)(*this)) + 1];
  77. #else
  78. m_text = new char [comWideStrLen ((BSTR)(*this)) + 1];
  79. #endif
  80. if (m_text == NULL) return NULL;
  81. #ifdef _WIN32
  82. wcstombs (m_text, (BSTR)(*this), wcslen ((BSTR)(*this)) + 1);
  83. #else
  84. comWideToAscii (m_text, (BSTR)(*this), comWideStrLen ((BSTR)(*this)) + 1);
  85. #endif
  86. return m_text;
  87. }
  88.     operator DWORD ()
  89.         {
  90.         return (DWORD)atol (*this);
  91.         }
  92.     VxComBSTR& operator = (const DWORD& src)
  93.         {
  94.         if (m_text)
  95.             {
  96.             delete []m_text;
  97.             m_text = NULL;
  98.             }
  99.         char buffer [32];
  100. sprintf (buffer, "%ld", src);
  101. *this = buffer;
  102. return *this;
  103.         }
  104.     void SetHex (const DWORD src)
  105. {
  106.         if (m_text)
  107.             {
  108.             delete []m_text;
  109.             m_text = NULL;
  110.             }
  111.         char buffer [32];
  112. sprintf (buffer, "%lX", src);
  113. *this = buffer;
  114. }
  115.     VxComBSTR& operator = (const DOUBLE& src)
  116.         {
  117.         if (m_text)
  118.             {
  119.             delete []m_text;
  120.             m_text = NULL;
  121.             }
  122.         char buffer [32];
  123. sprintf (buffer, "%f", src);
  124. *this = buffer;
  125. return *this;
  126.         }
  127.     VxComBSTR& operator = (const char * src)
  128.         {
  129.         if (m_text)
  130.             {
  131.             delete []m_text;
  132.             m_text = NULL;
  133.             }
  134. OLECHAR * wStr = new OLECHAR [(strlen (src) + 1)];
  135. #ifdef _WIN32
  136. mbstowcs (wStr, src, strlen (src) + 1);
  137. #else
  138. comAsciiToWide (wStr, src, strlen (src) + 1);
  139. #endif
  140. *((CComBSTR *)this) = wStr;
  141. delete []wStr;
  142. return *this;
  143.         }
  144.     bool const operator == (const VxComBSTR& src)
  145.         {
  146.         long int i;
  147.         if (Length () != src.Length ())
  148.             {
  149.             return false;
  150.             }
  151.         for (i = 0; i < (long int)Length (); i++)
  152.             {
  153.             if (((BSTR)(*this)) [i] != ((BSTR)src)[i])
  154.                 {
  155.                 return false;
  156.                 }
  157.             }
  158.         return true;
  159.         }
  160.     bool const operator != (const VxComBSTR& src)
  161.         {
  162.         return !(*this == src);
  163.         }
  164.   private:
  165.     char * m_text;
  166.     };
  167. #endif