以下两种方式实现功能一样,获取数据库表的名称,放到str中,需要将BTRS转换为String类型,但后一种方式会出现内存泄漏的问题
1/
_variant_t temvr;
CString str;
char *tchr;
tchr = _com_util::ConvertBSTRToString((_bstr_t)temvr);
str.Format("%s",tchr);
delete tchr;
///2///
_variant_t temvr;
CString str;
temvr = pRs->GetCollect("运行机车号");
str = _com_util::ConvertBSTRToString((_bstr_t)temvr);
pRs为_RecordsetPtr型,操作数据库表
ConvertBSTRToString(BSTR),将BSTR类型转换为String类型,在转换过程中需要涉及BSTR的转换,如果使用因此需要将转换得到的char指针用delete删除
同理,在将CString转成BSTR时,需要使用到CString::SysAllocString(),在使用后,应该调用SysFreeString来释放内存,否则会导致内存泄漏因此,在编程过程中,不应该忽视转换的中间量问题,在了解相关函数的特性后,调用才能做合适的约减,否则应该一步步来,不能直接进行中间变量类型转换。
关CString,BSTR,_bstr_t,variant_t释放问题,请参考