【问题标题】:How can I convert from LONGLONG to class _variant_t?如何从 LONGLONG 转换为 _variant_t 类?
【发布时间】:2012-05-11 14:41:44
【问题描述】:

在本例中,m_Amount 是 CString。 stringToNumber 函数成功将其转换为 LONGLONG 数字。但是当我想将它分配给一个变体时,我得到了这个错误:

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

我的代码

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

【问题讨论】:

    标签: c++ windows-ce variant long-long


    【解决方案1】:

    你不需要演员表。

    用途:

    _variant_t(
       __int64 i8Src
    )
    

    请参阅_variant_tMSDN 以获取更多参考。

    但是,Windows CE 并不提供常规 Windows XP/Vista/Win 7 安装中可用的所有数据类型。在您的情况下,这意味着 WinCE 不支持 64 位有符号/无符号整数。因此,最好建议您使用更窄的数据类型或滚动您自己的类型(可能使用两个ints)来获得LONGLONG

    【讨论】:

    • 这段代码正确吗? _variant_t myVar = _variant_t( stringToNumber(m_Amount) );
    • 是的!这应该有效。另外,我更喜欢以下内容:_variant_t myVar( stringToNumber(m_Amount) );.
    • 顺便说一句:使用VARIANTCComVariant 不是更好吗(除非您有项目特定要求)?
    • _variant_t myVar = _variant_t( stringToNumber(m_Amount) ); 不起作用并得到相同的错误。不幸的是,我无法更改 myVar 的类型。
    • 您在使用 Windows CE 吗?在这种情况下,您可能必须使用更窄的整数类型。
    【解决方案2】:

    您使用的是什么工具链?

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

    【讨论】:

    • 我正在通过 eVC++ 在 Windows Mobile 上进行开发。我没有明白你的目的。我是 C++ 新手
    • 啊 - 我不熟悉 eVC++ 以及它可能使用的任何 SDK,但如果它不支持 _variant_t 中的 __int64,我不会感到太惊讶。跨度>
    【解决方案3】:

    试试这个:

    union UltimateCast
    {
       __int64 From;
       __variant_t To;
    };
    

    将需要转换的 __int64 值放入 From 字段。然后从 To 字段中读取结果值。

    【讨论】:

    • 将 int64 值保存到 From 字段并从 To 读取转换结果。这实际上是一个重新诠释的演员表。
    • 这些值是如何转换的?
    • 我已经根据上面的评论修复了答案。这些值共享相同的内存位置,因此一个将被解释为另一个。
    • 这是什么错误:error C2621: union 'UltimateCast' : member 'To' has copy constructor
    • @breceivemail:C++03 中的 Union 不允许具有带有复制 ctor(或赋值运算符或非平凡 ctor)的类型。某些编译器可能会提供此功能,但 WinCE 可能不会。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2011-11-07
      • 2017-01-02
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多