用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;
即可处理正确