2

VisualStudio2008で32ビットモードでコンパイルしたコードがあります。今私は64ビットモードで同じものをコンパイルしようとしています。このエラーが発生しているポイントは次のとおりです。

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

エラーメッセージをグーグルで検索しようとしましたが、使用できる解決策が見つかりませんでした。誰かがこれで私を助けることができますか?SDWORDをSQLLENに型キャストする方法はありますか?

4

1 に答える 1

4

6 番目のパラメーターの実際の型は 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;
于 2012-12-18T14:20:05.427 に答える