У меня проблема с вызовом SQLGetDiagRec. Он отлично работает в режиме ascii, но в Юникоде вызывает сбой нашего приложения, и я просто не понимаю, почему. Кажется, вся документация, которую я смог найти, указывает на то, что она должна обрабатывать переключатель ascii / unicode внутри. Код, который я использую:
void clImportODBCFileTask::get_sqlErrorInfo( const SQLSMALLINT _htype, const SQLHANDLE _hndle )
{
SQLTCHAR SqlState[6];
SQLTCHAR Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN nRet;
memset ( SqlState, 0, sizeof(SqlState) );
memset ( Msg, 0, sizeof(Msg) );
// Get the status records.
i = 1;
//JC - 2009/01/16 - Start fix for bug #26878
m_oszerrorInfo.Empty();
nRet = SQLGetDiagRec(_htype, _hndle, i, SqlState, &NativeError, Msg, sizeof(Msg), &MsgLen);
m_oszerrorInfo = Msg;
}
все в порядке, пока эта функция не попытается вернуться, затем приложение вылетает. Он никогда не возвращается к строке кода после вызова get_sqlErrorInfo.
Я знаю, что именно в этом проблема, потому что я вставил диагностический код, и он проходит через SQLGetDiagRec, и это завершает эту функцию.
Если я прокомментирую строку SQLGetDiagRec, она будет работать нормально.
Он всегда отлично работает на моей машине для разработки, независимо от того, запущен ли релиз или отладка.
Любая помощь по этой проблеме будет принята с благодарностью.
Спасибо