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

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

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

最佳答案

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

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

10-07 14:25