2012-05-02 27 views
2

在这个例子中m_Amount是CString。 stringToNumber函数成功将其转换为LONGLONG数字。但是,当我想它分配给一个变种我得到这个错误:如何将LONGLONG转换为_variant_t类?

error C2440: 'type cast' : cannot convert from '__int64' to 'class _variant_t' 

mycode的

_variant_t myVar = _variant_t((LONGLONG)stringToNumber(m_Amount)); 

回答

0

我正在使用_variant_t将LONGLONG数据插入到SQL服务器数据库中。正如在this asnwer中提到的那样,数字在C++中映射到CString。所以我从数据库检索我的数字数据作为字符串,将其转换为LONGLONG,然后将其转换为字符串并将结果字符串存储到数据库。

SQL数字 - (从数据库中检索) - >字符串 - > LONGLONG - >字符串 - (插入到数据库) - > SQL数字

1

你不需要投。

用途:

_variant_t(
    __int64 i8Src 
) 

_variant_t MSDN进一步的参考。

但是,Windows CE并未提供常规Windows XP/Vista/Win 7安装中可用的所有数据类型。就你而言,这意味着WinCE不支持64位有符号/无符号整数。因此,建议您最好使用较窄的数据类型或滚动您自己的类型(也许使用两个int s)来获得LONGLONG

+0

是这个代码是否正确? '_variant_t myVar = _variant_t(stringToNumber(m_Amount));' – breceivemail

+0

是的!这应该工作。另外,我更喜欢以下内容:'_variant_t myVar(stringToNumber(m_Amount));'。 – dirkgently

+0

顺便说一句:你最好不要使用'VARIANT'或'CComVariant'(除非你有项目特定的要求)? – dirkgently

0

您使用的是什么工具链?

如果_WIN32_WINNT >= 0x501应该从__int64转换为_variant_t,这对应于至少为WinXP的目标。对于最新的Windows工具链,这应该是正确的,但是您可能需要使用一些较旧的工具(比如VS 2005,我相信)明确地设置宏定义。

+0

我正在使用eVC++在Windows Mobile上开发。我没有达到你的目的。我是C++新手 – breceivemail

+0

啊 - 我不熟悉eVC++和它可能使用的任何SDK,但是如果它不支持'_variant_t'中的'__int64',我不会感到惊讶。 –

0

试试这个:

union UltimateCast 
{ 
    __int64 From; 
    __variant_t To; 
}; 

把你需要从抛入From字段的值__int64。之后从To字段读取结果值。

+0

你能解释一下吗? – breceivemail

+1

将您的int64值保存到From字段中,并从To读取转换结果。这实际上是一个重新解释演员。 –

+0

这些值如何转换? – breceivemail