ATL中常见数据类型及其相互转换

来源:互联网 发布:如何开展网络政治工作 编辑:程序博客网 时间:2024/05/14 19:15
                            ATL中常见数据类型及其相互转换
 1BSTR类型:
    BSTR类型的定义如下:
    typedef  OLECHAR *  BSTR
   在32位windows平台下为宽字符(double-byte (Unicode) strings),在Apple Mac平台下为单字符(single-byte strings),一个 BSTR 由头部和字符串组成,头部包含了字符串的长度信息,字符串中可以包含嵌入的 null 值。其常见的操作函数如下:
  (1)比较两个字符串:
     int bstrcmp(const BSTR bstr1, const BSTR bstr2);
     int bstrncmp(const BSTR bstr1, const BSTR bstr2, int cChars);
     int bstrcmpi(const BSTR bstr1, const BSTR bstr2);
     int bstrncmpi(const BSTR bstr1, const BSTR bstr2, int cChars);
   (2)获得字符串的长度:
     int bstrlen(const BSTR bstr);
   (3)字符串的拷贝:
     BSTR bstrcpy(BSTR& bstrDst, const BSTR bstrSrc);
     BSTR bstrncpy(BSTR& bstrDst, const BSTR bstrSrc, int cChars);
   (4)字符串空间的分配:
     BSTR bstralloc(const BSTR bstr);
     BSTR bstralloc(const char *sz);
     BSTR bstralloc(const WCHAR *wsz);
     注意:用bstralloc分配的内存空间,需要用SysFreeString来释放。
2HRSULT类型:
     HRESULT类型的定义如下:
     typedef LONG        HRESULT;
    该类型为一个32位的值,其主要用来描述错误和警告信息。
    其组成的区域如下:
    第1位:标志返回值是否成功;0代表成功,1代表失败。
    第2 - 5位:为保留字段。
    第6 - 16位:指示错误和警告消息。
    第17 - 32位:描述错误和警告信息。
    因此,我们在判断函数的调用(返回值为HRESULT类型)是否成功时,只需要得知它的第一位是否为0;作为一个LONG类型来讲,即只需判断该值是否大于0。
为了使用的方便,在WINERROR.H中,定义了两个诊断宏SUCCEEDEDFAILED用来诊断HRESULT值,其定义如下:
    #define SUCCEEDED(Status)  ((HRESULT)(Status) >= 0)
    #define FAILED(Status)  ((HRESULT)(Status)<0)
3、常见类型之间的转换:
(1)整型数据类型转换为字符型 :
    短整型(int) :
    int i = 100; 
    char temp[200]; 
    itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示转换方式 
    itoa(i,temp,2); ///按二进制方式转换 
    长整型(long) 
    long l = 2001; 
    char temp[200];
    ltoa(l,temp,10); 
(2)字符型转换为整型 
    char temp[200] = "123";
    短整型(int) 
    i = atoi(temp); 
    长整型(long) 
    l = atol(temp); 
    浮点(double) 
    d = atof(temp);
(3)BSTR类型转换为LPTSTR
     LPTSTR pStr = NULL;
     BSTR bstrFileName = SysAllocString;(“poty”);
     _bstr_t _bstrFileName bstrFileName, false);
     pStr = (char * )_bstrFileName;
4、常见字符串操作函数:
(1)追加一个新的字符串:
     char *strcat( char *strDestination, const char *strSource );
(2)在字符串中查找一个字符:
    char *strchr( const char *string, int c ); //返回字符串中第一个出现的c
    char *strrchr( const char *string, int c ); //返回字符串中最后一个出现的c
(3)在字符串中查找一个字符串:
    char *strstr( const char *string, const char *strCharSet );
    size_t strspn( const char *string, const char *strCharSet );
(4)字符串拷贝:
    char *strcpy( char *strDestination, const char *strSource );