【问题标题】:error C2664: 'SQLGetData' : cannot convert parameter 6 from 'SDWORD *' to 'SQLLEN *'错误 C2664:“SQLGetData”:无法将参数 6 从“SDWORD *”转换为“SQLLEN *”
【发布时间】:2012-12-17 22:03:33
【问题描述】:

我有在 Visual Studio 2008 上以 32 位模式编译的代码。现在我试图在 64 位模式下编译它。 我遇到此错误的地方是:

SDWORD temp=0;
SDWORD & readlen = (pValue?*pValue:temp); 
retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&readlen);

我试图用谷歌搜索错误消息,但没有找到我可以使用的解决方案。谁能帮我这个。 有什么方法可以将 SDWORD 类型转换为 SQLLEN?

【问题讨论】:

    标签: c++ visual-studio-2008 visual-c++ 64-bit


    【解决方案1】:

    第六个参数的实际类型是 SQLGetData 是 SQLLEN*。 MS 的文档也使用 SQLINTEGER*。您的代码将其视为 SDWORD*。这是一个简单的转换 IF SQLLEN 和 SDWORD 具有相同的基础数据类型。但是,如果 SQLLEN 是 64 位宽的值,而 SDWORD 是 32 位宽的,那么强制转换就不够了。在这种情况下,您可以尝试:

    SQLLEN length=0;
    retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&length);
    if (pValue)
        *pValue = length;
    

    【讨论】:

    • 如果pValue不为null,如何将值赋给length??在旧代码中它是 SDWORD & readlen = (pValue?*pValue:temp); 因为 pValue 在旧代码中以 SDWORD 形式出现,所以我尝试将大小写从 SDWORD 输入到 SQLLEN,但 SDWORD 是 32 位,而 SQLLEN 是 64 位。
    • 试试 *pValue = (SDWORD)length;
    • 该类型将长度值转换为 pValue,这里的长度是 SQLLEN 和 pValue SDWORD。我需要使用 SQLLEN,有没有办法从 pValue SDWORD 类型转换为长度类型 SDWORD。 SDWORD 是 32 位的,SQLLEN 是 64 位的,会报错!!:(
    • warning C4312: 'type cast' : conversion from 'SDWORD' to 'SQLLEN *' of greater size 很抱歉,这是警告消息而不是错误消息。但是我还是担心会不会疼!!
    • SQLLEN temp=0; SQLLEN readlen = (pValue?*pValue:temp); retValue=::SQLGetData(hStatement,mCurrentCol=column,cType,actualbuff,len,&readlen); 我没有看到任何警告或错误,但此时我不确定是否有任何运行时错误,因为 pValue 是 SDWORD 类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多