- 論壇徽章:
- 0
|
我數(shù)據(jù)庫(kù)信息如下:
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編寫程序訪問(wèn)數(shù)據(jù)
程序位64位
遇到一個(gè)很怪的情況:
連接,執(zhí)行sql都正常,使用ct_describe( cmd, i, &c_info );時(shí)
返回成功,但是c_info里的CS_DATAFMT結(jié)構(gòu)是錯(cuò)位的
從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位環(huán)境下,CS_INT是long,長(zhǎng)度應(yīng)該是8
但是用gdb看獲取的內(nèi)存,c_info里的數(shù)據(jù),每一個(gè)CS_INT類型的字段長(zhǎng)度都是4,而不是64位客戶端庫(kù)里的8
自定義一個(gè)結(jié)構(gòu)
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;
即可處理正確
有大俠知道什么機(jī)關(guān)么? |
|