2012-12-17 76 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

相關問題