C/C++中_variant_t 型转为char * 的终极解决办法
因为我用ADO访问数据库时,取出的字段值为_variant_t 型的,在使用字段值的时候,需要对其进行类型转化。转换为int之类的就很简单了,转换为char *时,却花费了我不少时间。从网上找了半天,找到相关的方法,其中转载最多的一个就是:VariantToCString(VARIANT var)这个函数了,当然它是用来转换CString型的。但应用上之后,是转化过去了,同时程序会报错。也不知道到底是什么原因。
最后,我想到一个最终的解决办法,虽然没有找到根本的错误根源,但成功防止了错误“出现在你面前”。其实也很简单,只是用了try catch
_variant_t gprsID;
gprsID = "1234567890";//这里应为数据库处理函数返回的值,即_variant_t 型的值。
const char* gprsId;
try
{
_bstr_t bst_t = gprsID;
gprsId = (const char*)bst_t;
}
catch(...)
{
//printf("%s\r\n",gprsId);
//上句的目的在于测试gprsId已经转化成功,但中间出了错误,注释掉后对你下面的程序没有影响,所以说是把错误给藏起来了,但类型转换成功了,目的已经达到。
}
//继续执行其它代码。
点评:其实不光在C++中,在其它语言里,如C#,也一定有同行应用过此类方式。我把这种方式称为“委曲求全”,呵呵!
最后,我想到一个最终的解决办法,虽然没有找到根本的错误根源,但成功防止了错误“出现在你面前”。其实也很简单,只是用了try catch
_variant_t gprsID;
gprsID = "1234567890";//这里应为数据库处理函数返回的值,即_variant_t 型的值。
const char* gprsId;
try
{
_bstr_t bst_t = gprsID;
gprsId = (const char*)bst_t;
}
catch(...)
{
//printf("%s\r\n",gprsId);
//上句的目的在于测试gprsId已经转化成功,但中间出了错误,注释掉后对你下面的程序没有影响,所以说是把错误给藏起来了,但类型转换成功了,目的已经达到。
}
//继续执行其它代码。
点评:其实不光在C++中,在其它语言里,如C#,也一定有同行应用过此类方式。我把这种方式称为“委曲求全”,呵呵!