请教:
   1.他们的结构是什么样的?是怎么存储的?
   2.BSTR,TCHAR,WCHAR,CHAR他们之间能否进行强制转换?
例如:
   char *p="abc";则用BSTR,WCHAR,TCHAR如何来表示呢?内部结构是什么样的?
请举例说明。
 由BSTR可以转换成CHAR,WCHAR,CHAR吗?由 CHAR,WCHAR,CHAR可以转换成BSTR吗?如何转换,请举例说明。

解决方案 »

  1.   

    BSTR,WCHAR,CHAR,TCHAR
    1.这些类型的具体结构是怎样的?能否举例说明
    2。能否实现类型间的强制转换?若能,请举例说明。
    3。如分别实现BSTR,WCHAR,TCHAR得串拷贝,应怎样实现?请举例说明。
    例如:
       char *p="abc";则用BSTR,WCHAR,TCHAR如何来表示呢?内部结构是什么样的?
    请举例说明。
     由BSTR可以转换成CHAR,WCHAR,CHAR吗?由 CHAR,WCHAR,CHAR可以转换成BSTR吗?如何转换,请举例说明。
      

  2.   

    现在C++的字符分成两种类型wchar_t和char。
    其中 WCHAR==wchar_t,CHAR==char。
    TCHAR是一种条件编译的类型,根据条件可以代表wchar_t或char。BSTR是BASICA中的字符串在C++中的表示方法,它是一种带有字符计数的wchar_t类型的字符串,SysAllocString, SysFreeString这两个函数是Windows中专门处理BSTR的函数(属于COM函数)。各种类型之间是可以进行强制转换的(有些有专有的函数比如wchar_t和char的相互转换)
      

  3.   

    // BSTR
    是一个指针,指向宽字符字符串,typedef OLECHAR *BSTR;
    //TCHAR
    The TCHAR data type is a Win32 character string that can be used to describe ANSI, DBCS, or Unicode strings. For ANSI and DBCS platforms, TCHAR is defined as follows:
    typedef char          TCHAR;    
    For Unicode platforms, TCHAR is defined as synonymous with the WCHAR type. 
    // WCHAR
     16-bit Unicode character. 
    // CHAR
    8-bit Windows (ANSI) character.
    // CComVariant
    对VARIANT进行了封装
    // CComBSTR
    对BSTR进行了封装
    // SysAllocString和SysFreeString
    Win32 api function, 
    SysAllocString是分配一个字符串,并copy the passed string into it.
    SysFreeString是释放由SysAllocString分配的内存空间
      

  4.   

    你要问得也太多了,要一一讲清楚可要打不少得字耶,先回答一个稍简单的吧:
    WCHAR,CHAR,TCHAR的关系实际上是这样的#ifdef UNICODE 
        typedef wchar_t TCHAR; 
    #else 
        typedef unsigned char TCHAR; 
    #endif 
     
    typedef unsigned char CHAR; 
    typedef unsigned wchar_t WCHAR; //wchar_t 16-bit predefined type for wide characters. Unsigned A BSTR, known as basic string or binary string, is a pointer to a wide character string used by Automation data manipulation functions.typedef OLECHAR FAR* BSTR;
     
    BSTRs are wide, double-byte (Unicode) strings on 32-bit Windows platforms and narrow, single-byte strings on the Apple® PowerMac™.因而不能直接进行强制转换,系统提供了一些宏进行转换如OLE2T,T2OLE。
    另外 BSTR 并在 COM 对象之间传递它们时,必须小心地处理它们所使用的内存以避免内存泄漏。当 BSTR 停留在接口中时,在完成其使用后必须释放出它的内存。但是,如果 BSTR 传递出了接口,那么接收对象将负责它的内存管理。管理的函数就诸如SysAllocString, SysFreeString。BSTR是一个比较复杂的数据类型,系统有许多关于他的操作和封装对象,应该看一些有关方面的书。其他的问题请提的具体些,并且多给一点分。
      

  5.   

    http://www.vckbase.com/study/article/data_convert.htm
    你的答案在这里,本来想给你贴出来的,太大了,你自己去看吧
      

  6.   

    up!
    我也不太明白,写com时,搞得头昏脑胀的