2012-12-17 56 views
1

我有在32位模式下编译Visual Studio 2008的代码。现在我试图在64位模式下编译相同的代码。在那里我有这个错误 点是:错误C2664:'SQLGetData':无法将参数6从'SDWORD *'转换为'SQLLEN *'

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

我想谷歌的错误消息,但没有找到解决办法,我可以使用。谁能帮我这个。 有没有什么办法可以将SDWORD转换为SQLLEN?

回答

3

第六个参数的实际类型是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; 
+0

如何将值赋给长度,如果pValue不为空?在旧代码中,它是 'SDWORD&readlen =(pValue?* pValue:temp); '因为pValue在旧代码中以SDWORD的形式出现,我试图从SDWORD输入case到SQLLEN,但SDWORD是32位,SQLLEN是64位。 – Vivek

+0

Try * pValue =(SDWORD)length; –

+0

该类型将长度值转换为pValue,这里的长度是SQLLEN和pValue SDWORD。我需要使用SQLLEN,有没有办法从pValue SDWORD类型化SDWORD。 SDWORD是32位和SQLLEN是64,我抛出一个错误!! :( – Vivek

相关问题