BSTR储存的可以是ascii,也可以是wchar_t,对吗
BSTR存储的可以是ascii,也可以是wchar_t,对吗?
例如,有一个com组件是vc Unicode工程设置编译出来的,里面有个函数叫StringUpper(BSTR in,BSTR* out),函数内部非常简单,就是调用了CComBSTR::ToUpper()
然后我写了两个客户端程序
(1)第一个客户端是ASCII类型的工程设置,传进入一个ascii类型的hello world
(2)第一个客户端是ASCII类型的工程设置,传进宽字符类型的 L"hello world"
这两个程序运行,StringUpper()返回的_bstr_t都是HELLO WORLD.
我的问题是: 难道BSTR或者CComBSTR内部实现了字符判断,ascii的用一套ascii函数,宽字符的用w开头的函数吗? 相当的疑惑!
------解决方案--------------------
你传入中文试试。
------解决方案--------------------
BSTR就是带长度的unicode字符串
CComBSTR s(str);这里传入ascii的话,会进行一次转化的.
------解决方案--------------------
BSTR 是个超级混血儿,但本质上是个有长度的unicode字符串,既不是C++的字符串也不是VB的字符串
------解决方案--------------------
BSTR对wchar_t*字符串的一个包装
例如,有一个com组件是vc Unicode工程设置编译出来的,里面有个函数叫StringUpper(BSTR in,BSTR* out),函数内部非常简单,就是调用了CComBSTR::ToUpper()
STDMETHODIMP xxx::Upper(BSTR str, BSTR* pVal)
{
CComBSTR s(str);
s.ToUpper();
*pVal = s.Copy();
return S_OK;
}
然后我写了两个客户端程序
(1)第一个客户端是ASCII类型的工程设置,传进入一个ascii类型的hello world
(2)第一个客户端是ASCII类型的工程设置,传进宽字符类型的 L"hello world"
这两个程序运行,StringUpper()返回的_bstr_t都是HELLO WORLD.
我的问题是: 难道BSTR或者CComBSTR内部实现了字符判断,ascii的用一套ascii函数,宽字符的用w开头的函数吗? 相当的疑惑!
------解决方案--------------------
你传入中文试试。
------解决方案--------------------
BSTR就是带长度的unicode字符串
CComBSTR s(str);这里传入ascii的话,会进行一次转化的.
------解决方案--------------------
BSTR 是个超级混血儿,但本质上是个有长度的unicode字符串,既不是C++的字符串也不是VB的字符串
------解决方案--------------------
BSTR对wchar_t*字符串的一个包装