Chinaunix

标题: 【求助】ctlib 访问sybase数据库问题 [打印本页]

作者: rocknio    时间: 2013-10-10 15:30
标题: 【求助】ctlib 访问sybase数据库问题
我数据库信息如下:
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;
即可处理正确


有大侠知道什么机关么?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2