在最佳时间从_variant_t获取char * [英] Getting a char* from a _variant_t in optimal time

查看:257
本文介绍了在最佳时间从_variant_t获取char *的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里是我想加速的代码。它从一个ADO记录集获得一个值,并将其转换为一个char *。但这是缓慢的。我可以跳过_bstr_t的创建吗?

Here's the code I want to speed up. It's getting a value from an ADO recordset and converting it to a char*. But this is slow. Can I skip the creation of the _bstr_t?

                _variant_t var = pRs->Fields->GetItem(i)->GetValue();

                if (V_VT(&var) == VT_BSTR)
                {
                    char* p = (const char*) (_bstr_t) var;


推荐答案

BSTR的前4个字节包含长度。你可以循环遍历并得到每个其他字符如果unicode或每个字符如果多字节。某种memcpy或其他方法也可以工作。 IIRC,这可以快于 W2A 或者转换(LPCSTR)(_ bstr_t)

The first 4 bytes of the BSTR contain the length. You can loop through and get every other character if unicode or every character if multibyte. Some sort of memcpy or other method would work too. IIRC, this can be faster than W2A or casting (LPCSTR)(_bstr_t)

这篇关于在最佳时间从_variant_t获取char *的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆