ODBC SQLBindCol () имеет неправильный указатель, но он работает. Как это возможно? - PullRequest
1 голос
/ 03 июля 2019

Когда я выполнял приложение ODBC, я мог сделать это без каких-либо проблем.Но, как только я проверил tracelog, я обнаружил очень странные значения в назначении указателя.

Вот некоторая часть tracelog.

WCCOActrl.exe - 329c-2160   ENTER SQLGetStmtAttrW 
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  11 <SQL_ATTR_RETRIEVE_DATA>
        SQLPOINTER          0x000000000A55EF90
        SQLINTEGER                  -6 
        SQLINTEGER *        0x0000000000000000

WCCOActrl.exe - 329c-2160   EXIT  SQLGetStmtAttrW  with return code 0 (SQL_SUCCESS)
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  11 <SQL_ATTR_RETRIEVE_DATA>
        SQLPOINTER          0x000000000A55EF90 (1) <SQL_RD_ON>
        SQLINTEGER                  -6 
        SQLINTEGER *        0x0000000000000000

WCCOActrl.exe - 329c-2160   ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  11 <SQL_ATTR_RETRIEVE_DATA>
        SQLPOINTER                 1 <SQL_RD_ON>
        SQLINTEGER                  -6 

WCCOActrl.exe - 329c-2160   EXIT  SQLSetStmtAttrW  with return code 0 (SQL_SUCCESS)
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  11 <SQL_ATTR_RETRIEVE_DATA>
        SQLPOINTER                 1 <SQL_RD_ON>
        SQLINTEGER                  -6 

WCCOActrl.exe - 329c-2160   ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  23 <SQL_ATTR_ROW_BIND_OFFSET_PTR>
        SQLPOINTER          0x00000000076FE5D0
        SQLINTEGER                  -4 

WCCOActrl.exe - 329c-2160   EXIT  SQLSetStmtAttrW  with return code 0 (SQL_SUCCESS)
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                  23 <SQL_ATTR_ROW_BIND_OFFSET_PTR>
        SQLPOINTER          0x00000000076FE5D0
        SQLINTEGER                  -4 

WCCOActrl.exe - 329c-2160   ENTER SQLBindCol 
        HSTMT               0x0000000000C57FD0
        UWORD                        1 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x0000000000000098
        SQLLEN                   256
        SQLLEN *            0x0000000000000090

WCCOActrl.exe - 329c-2160   EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
        HSTMT               0x0000000000C57FD0
        UWORD                        1 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x0000000000000098
        SQLLEN                   256
        SQLLEN *            0x0000000000000090 (BADMEM)

WCCOActrl.exe - 329c-2160   ENTER SQLBindCol 
        HSTMT               0x0000000000C57FD0
        UWORD                        2 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x00000000000001A8
        SQLLEN                   201
        SQLLEN *            0x00000000000001A0

WCCOActrl.exe - 329c-2160   EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
        HSTMT               0x0000000000C57FD0
        UWORD                        2 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x00000000000001A8
        SQLLEN                   201
        SQLLEN *            0x00000000000001A0 (BADMEM)

WCCOActrl.exe - 329c-2160   ENTER SQLBindCol 
        HSTMT               0x0000000000C57FD0
        UWORD                        3 
        SWORD                      -25 <SQL_C_SBIGINT>
        PTR                0x0000000000000288
        SQLLEN                    20
        SQLLEN *            0x0000000000000280

WCCOActrl.exe - 329c-2160   EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
        HSTMT               0x0000000000C57FD0
        UWORD                        3 
        SWORD                      -25 <SQL_C_SBIGINT>
        PTR                0x0000000000000288
        SQLLEN                    20
        SQLLEN *            0x0000000000000280 (BADMEM)

WCCOActrl.exe - 329c-2160   ENTER SQLBindCol 
        HSTMT               0x0000000000C57FD0
        UWORD                        4 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x00000000000002B0
        SQLLEN                    11
        SQLLEN *            0x00000000000002A8

WCCOActrl.exe - 329c-2160   EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
        HSTMT               0x0000000000C57FD0
        UWORD                        4 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x00000000000002B0
        SQLLEN                    11
        SQLLEN *            0x00000000000002A8 (BADMEM)

WCCOActrl.exe - 329c-2160   ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                   9 <SQL_ROWSET_SIZE>
        SQLPOINTER                 1
        SQLINTEGER                  -6 

WCCOActrl.exe - 329c-2160   EXIT  SQLSetStmtAttrW  with return code 0 (SQL_SUCCESS)
        SQLHSTMT            0x0000000000C57FD0
        SQLINTEGER                   9 <SQL_ROWSET_SIZE>
        SQLPOINTER                 1
        SQLINTEGER                  -6 

WCCOActrl.exe - 329c-2160   ENTER SQLExtendedFetch 
        HSTMT               0x0000000000C57FD0
        UWORD                        1 <SQL_FETCH_NEXT>
        SQLLEN                     0
        SQLULEN *           0x000000000A55F040
        UWORD *             0x00000000076FC0B0

Как вы можете видеть PTR в SQLBindCol (),PTR неверное значение.(он должен иметь действительный указатель ...)

Есть ли люди, которые могут мне это объяснить?

Очень хорошо работает на "драйвере mysql odbc", но не на моем собственном драйвере.

Как это возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...