64 位迁移问题:指针更改
64-bit migration issue: pointer change
我正在使用Ernesto Guisado为Microsoft的ODBC API使用的轻量级C++包装器,虽然无法从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 位版本?
代码期望一个类型等效于另一个可能不同的类型,这是一种不好的做法。
为了保持类接口完整,您应该将函数更改为如下所示的内容:
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。
相关文章:
- 链表指针问题
- 指针问题:从不兼容的类型"int"分配给"int *"
- C++指针问题:如何修复这些代码中的错误?
- *++*++ppp,*++pp[1],*++(*(1+ppp)有什么具体的区别吗?(C/C++指针问题)
- C++ 入门加列表:10.9 "顶部"指针问题
- C++ 指针问题 - 通过方法更新指针
- 未分配正在释放的指针 - 指针问题
- 双指针问题通过函数传递错误
- 在C++中实现图形 DFS,指针问题
- 返回指针问题
- C++ - 有人有分析指针到指针问题的技巧吗?
- 选择排序指针问题
- 涉及删除操作的 C++ 指针问题
- 模板类指针问题 c++
- Swig和指针问题(python)
- 引用指针问题
- 函数指针问题
- 通过类型C++ 的继承树递归导致此指针问题
- 无法将文件读入字符数组(像往常一样,某些指针问题)
- 结构中的指针问题