看流星社区

 找回密码
 注册账号
查看: 1808|回复: 0

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

[复制链接]

该用户从未签到

发表于 2014-6-15 09:07:54 | 显示全部楼层 |阅读模式
ATL中常见数据类型及其相互转换
1、BSTR类型:
    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来释放。
2、HRSULT类型:
     HRESULT类型的定义如下:
     typedef LONG        HRESULT;
    该类型为一个32位的值,其主要用来描述错误和警告信息。
    其组成的区域如下:
    第1位:标志返回值是否成功;0代表成功,1代表失败。
    第2 - 5位:为保留字段。
    第6 - 16位:指示错误和警告消息。
    第17 - 32位:描述错误和警告信息。
    因此,我们在判断函数的调用(返回值为HRESULT类型)是否成功时,只需要得知它的第一位是否为0;作为一个LONG类型来讲,即只需判断该值是否大于0。
为了使用的方便,在WINERROR.H中,定义了两个诊断宏SUCCEEDED与FAILED用来诊断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 );
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-29 21:57

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表