void test2()
{
//char * <---> _bstr_t
char *s1="123";
_bstr_t bt1=s1;
bt1+=" _bstr_t";
char *p=(char*)bt1;
printf("%s\n",p);
//char * <---> BSTR
BSTR b1=(BSTR)p; //BSTR本质 char*或w_char*
char *p2=(char*)b1;
printf("%s\n",(char*)b1);
printf("%s\n",p2);
//_bstr_t <---> BSTR,使用char*作为中介
BSTR b2=(BSTR)(char*)bt1;
_bstr_t bt2=(char*)b2;
printf("%s\n",(char*)b2);
printf("%s\n",(char*)bt2);
}
原理:
..\VC98\Include\RPC.H
#if defined(_WIN32) && !defined(OLE2ANSI)
typedef WCHAR OLECHAR;
#else
typedef char OLECHAR;
#endif
# define __RPC_FAR
typedef /* [wire_marshal] */ OLECHAR __RPC_FAR *BSTR; //BSTR本质 char*或w_char*
..\VC98\Include\comutil.h
class _bstr_t {
//...
public:
operator const char*() const throw(_com_error); //提供了 char*的运算符方法
}