1. _bstr_t 转载:
http://wangw.blogbus.com/logs/43003776.html
1._bstr_t是个对bstr的类,具体定义可以看comutil.h。
com组件传输字符串有固定的标准,就是bstr,这样才能在不同的语言里调用,试想你传的是c的某个字符串类型,vb又如何调用呢?ado是个com组件所以传的也是bstr,使用_bstr_t不但方便接收,而且方便处理。
1._bstr_t是个对bstr的类,具体定义可以看comutil.h。
com组件传输字符串有固定的标准,就是bstr,这样才能在不同的语言里调用,试想你传的是c的某个字符串类型,vb又如何调用呢?ado是个com组件所以传的也是bstr,使用_bstr_t不但方便接收,而且方便处理。
2.严格地说_bstr_t不属于对bstr的类,它可以直接转换成bstr型,也可以直接转换成普通的char*型
比如
_bstr_t str("sfalkj");//用char*来构造
bstr str1=str;//str1是双字节的
char *str2=str;//str2是单字节的
比如
_bstr_t str("sfalkj");//用char*来构造
bstr str1=str;//str1是双字节的
char *str2=str;//str2是单字节的
3._bstr_t 是一个封装了char*和wchar_t*之间相关的操作,已方便在使用com对象时的字符串操作,也就是说你可以不必关心给_bstr_t对象赋值了什么类型的字符串,或者要与什么类型的字符串相加等操作,它的重载函数会自动选择合适的函数进行操作的。
4.将BSTR或_bstr_t转换为CString
strValue为CString类,
bstr1为_bstr_t类
bstr1为_bstr_t类
bstr2为BSTR类
strValue.Format("%s,%s'",(LPCTSTR)bstr1,bstr2);
若bstrSql前面不加LPCTSTR则不能正确赋值,
strValue=bstr2 可将BSTR类型的字符直接赋给CString
而strValue=bstr1 不能将_bstr_t类的字符直接赋给CString
这样strValue=(LPCTSTR)bstr1就可以。
若bstrSql前面不加LPCTSTR则不能正确赋值,
strValue=bstr2 可将BSTR类型的字符直接赋给CString
而strValue=bstr1 不能将_bstr_t类的字符直接赋给CString
这样strValue=(LPCTSTR)bstr1就可以。
2.关于LPCTSTR的解说
LP-长指针
C-Const
T-Unicode/ANSI兼容
STR-字符串
C-Const
T-Unicode/ANSI兼容
STR-字符串
3._variant_t
_variant_t和_bstr_t这两个类分别封装并管理VARIANT和BSTR这两种数据类型,
VARIANT和BSTR这两种类型是COM中使用的数据类型。
为了C++中的变量应用到ADO编程中,只能进行数据类型的转换。
通过_variant_t和_bstr_t这两个类,就可以方便的把C++类型变量转换成COM中的变量了
个人理解:
_bstr_t 和LPCTSTR是指针,string实际上也相当于一个指针。