2017-05-09 57 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。