gpt4 book ai didi

c++ - 64 位迁移问题 : pointer change

转载 作者:行者123 更新时间:2023-11-28 05:09:10 32 4
gpt4 key购买 nike

我正在使用 A Lightweight C++ Wrapper for Microsoft's ODBC API通过 Ernesto Guisado , 虽然无法从 DDJ 下载源文件,但我设法在 github 上找到了一份拷贝.

我可以在 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 位)。

如何从 ULONG 顺利升级到 64 位版本?

最佳答案

代码期望一个类型等同于另一个可能不同的类型,这是一种不好的做法。

为了保持类接口(interface)的完整性,你应该把这个函数改成这样:

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;
}

如果类接口(interface)无关紧要,您也可以在函数中将 ULONG 替换为 SQLULEN。

关于c++ - 64 位迁移问题 : pointer change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43867547/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com