2017-05-09 75 views
0

我使用的是A Lightweight C++ Wrapper for Microsoft's ODBC APIErnesto Guisado,虽然无法从DDJ下载源文件,但我在github上找到了一份副本。64位迁移问题:指针变化

我可以在Win32当前代码编译,但在64位编译命中错误

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-位)。

我该怎么做才能顺利升级ULONG,这样才能有64位版本?

+0

都是指针。 –

+0

@ TheTechel是的,但是一个指向一个32位的ULONG,另一个指向一个64位的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; 
} 

如果该类接口没关系,你也可以在功能上取代ULONG通过SQLULEN。