В нашем приложении есть соединения ODB C. Они вообще не работают для версии x64.
Вызов SQLBindCol из 64-битной Windows программы всегда завершается ошибкой со следующими параметрами:
void *dataPtr = new char[ 512 ] ;
SDWORD count = 0;
SQLBindCol( hstmt, 1, SQL_C_CHAR, dataPtr, 512, &count);
Удивительно то, что вместо 512 ( для BufferLength). журнал SQL показывает огромное количество -3689348818177884160:
T=1 6840-3404 ENTER SQLBindCol
HSTMT 0x000000000E363F40
UWORD 1
SWORD 1 <SQL_C_CHAR>
PTR 0x0000000000000000
SQLLEN -3689348818177884160
SQLLEN * 0x000000001BA1DC82
T=1 6840-3404 EXIT SQLBindCol with return code 0 (SQL_SUCCESS)
HSTMT 0x000000000E363F40
UWORD 1
SWORD 1 <SQL_C_CHAR>
PTR 0x0000000000000000
SQLLEN -3689348818177884160
SQLLEN * 0x000000001BA1DC82 (5714869293485654016)
DIAG [S1090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0)
Даже передача BufferLength 0 приводит к огромному значению, как показано в журнале SQL. Компиляция 32-битной пихты работает без проблем. Установлены 64-битные драйверы ACCESS.