2017-05-09 8 views
0

私はA Lightweight C++ Wrapper for Microsoft's ODBC APIErnesto Guisadoを使用していますが、DDJからソースファイルをダウンロードできませんでしたが、githubにコピーが見つかりました。64ビット移行の問題:ポインタの変更

Iは、Win32における現在のコードでコンパイルが、x64のにコンパイルすることは基本的に割り当てることができない、エラー

error C2664: 'SQLRETURN SQLDescribeCol(SQLHSTMT,SQLUSMALLINT,SQLCHAR *,SQLSMALLINT,SQLSMALLINT *,SQLSMALLINT *,SQLULEN *,SQLSMALLINT *,SQLSMALLINT *)' : 

cannot convert argument 7 from 'ULONG *' to 'SQLULEN *' 

に当たる可能性がULONG *ULONGが32ビットである)、SQLULEN *SQLULENがあるまで64ビット)。

64ビットバージョンを持つことができるように、ULONGから円滑なアップグレードを行うにはどうすればよいですか?

+0

両方がポインタです。 –

+0

@TheTechelはい、一方は32-bit ULONGを指しており、他方は64-bit UINT64を指しています。 – athos

+1

ULONGをSQLULENに変更する必要があります –

答えて

1

コードでは、タイプが異なる可能性がある別のタイプと同等であると予想されています。これは悪い習慣です。

そのままクラスインターフェイスを維持するには、このような何かに関数を変更する必要があります。

void SqlStatement::DescribeCol(USHORT number, UCHAR *name, 
     USHORT BufferLength, SHORT *NameLength, 
     SHORT *DataType, ULONG *ColumnSize, 
     SHORT *DecimalDigits, SHORT *Nullable) 
{ 
    SQLULEN tmpColumnSize; // store column size before converting to ULONG 
    assert(IsValid()); 
    CheckStatus(::SQLDescribeCol(m_hstmt, number, name, 
     BufferLength, NameLength, 
     DataType, &tmpColumnSize, 
     DecimalDigits, Nullable)); 
    if(ColumnSize) *ColumnSize = (ULONG)tmpColumnSize; 
} 

クラスインターフェイスは関係ない場合は、関数内でSQLULENによってULONGを置き換えることができます。

関連する問題