- 论坛徽章:
- 0
|
我数据库信息如下:
Adaptive Server Enterprise/15.0.3/EBF 16374/P/x86_64/Enterprise Linux/ase1503/2669/64-bit/FBO/Wed Nov 12 16:52:49 2008
用ct_lib编写程序访问数据
程序位64位
遇到一个很怪的情况:
连接,执行sql都正常,使用ct_describe( cmd, i, &c_info );时
返回成功,但是c_info里的CS_DATAFMT结构是错位的
从sybase客户端的头文件里看
#if defined( __alpha) || defined(SYB_LP64) || defined(SYB_LLP64) || defined(_AIX)
typedef int CS_INT;
typedef int CS_RETCODE;
typedef int CS_BOOL;
typedef unsigned int CS_UINT;
#else
typedef long CS_INT;
typedef long CS_RETCODE;
typedef long CS_BOOL;
typedef unsigned long CS_UINT;
#endif
在64位环境下,CS_INT是long,长度应该是8
但是用gdb看获取的内存,c_info里的数据,每一个CS_INT类型的字段长度都是4,而不是64位客户端库里的8
自定义一个结构
typedef struct
{
char name[256];
int namelen;
int datatype;
int format;
int maxlength;
int scale;
int precision;
int status;
int count;
int usertype;
void *locale
}DATA_FMT;
即可处理正确
有大侠知道什么机关么? |
|