如题,下面第1种方法就可以,后面的就不行。为啥?
COleVariant var1,var2,var3,var4;
int i;
i =(int)V_R8(&var1); //可以,V_R8对应的是dblVal
i =(int)V_I2(&var2); //不行,V_I2对应的是iVal
i =(int)V_I4(&var3); //不行,V_I4对应的是lVal
i = var4.lVal; //也不行
请教大伙。后面3种怎么就不行了呢?
如题,下面第1种方法就可以,后面的就不行。为啥?
COleVariant var1,var2,var3,var4;
int i;
i =(int)V_R8(&var1); //可以,V_R8对应的是dblVal
i =(int)V_I2(&var2); //不行,V_I2对应的是iVal
i =(int)V_I4(&var3); //不行,V_I4对应的是lVal
i = var4.lVal; //也不行
请教大伙。后面3种怎么就不行了呢?
参考GPT和自己的思路:
COleVariant是MFC中用于封装VARIANT数据结构的类,VARIANT数据结构可以存储不同类型的数据。V_R8、V_I2、V_I4等都是VARIANT数据结构中用于访问不同类型数据的宏定义,它们对应的字段分别是dblVal、iVal、lVal等。
当COleVariant内部存储的数据类型为double时,使用V_R8宏定义可以将其转换为整型int类型;但当内部存储的数据类型为short或long时,使用V_I2或V_I4宏定义将无法正确转换,因为VARIANT数据结构内部存储的数值类型与目标类型不匹配。因此,需要根据数据类型选择正确的宏定义进行转换。而直接使用var4.lVal也不能保证正确转换,因为在不同平台和编译器下,VARIANT数据结构的存放方式和对齐方式也可能有所不同,正确的方法是使用对应的宏定义进行转换。