Ich habe ein Problem mit dem Aufruf von SQLGetDiagRec. Es funktioniert gut im ASCII-Modus, aber in Unicode verursacht es unsere App zum Absturz, und ich kann einfach nicht sehen, warum. Die gesamte Dokumentation, die ich gefunden habe, scheint darauf hinzudeuten, dass sie den ascii/unicode-Schalter intern handhaben sollte. Der Code, den ich verwende ist:SQLGetDiagRec verursacht Absturz in Unicode-Versionserstellung
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;
}
alles ist in Ordnung, bis diese Funktion versucht, zurückzukehren, dann stürzt die App ab. Nach dem Aufruf von get_sqlErrorInfo wird die Codezeile nicht zurückgenommen.
Ich weiß, das ist, wo das Problem liegt, weil ich Diagnose-Code eingefügt habe und es über die SQLGetDiagRec in Ordnung kommt und es diese Funktion erfüllt.
Wenn ich die SQLGetDiagRec-Zeile kommentieren, funktioniert es gut.
Es funktioniert immer gut auf meiner Entwicklungs-Box, ob es Release oder Debug läuft.
Jede Hilfe zu diesem Problem würde sehr geschätzt werden. Danke
Sie könnten das Projekt mit _UNICODE und UNICODE definiert haben, die SQLGetDiagRec zu SQLGetDiagRecW zugeordnet hätten. In Visual Studio besteht die einfachste Möglichkeit darin, zu den Eigenschaften Ihres Projekts zu gelangen. Allgemein-> Zeichensatz = Unicode-Zeichensatz verwenden. –
ich sehe in der Windows-Code, der es so aussieht, wo es sich shoudl, aber es wurde abstürzt, bis ich exlicitly tat #ifdef _UNICODE \t \t nRet = SQLGetDiagRecW (_htype, _hndle, i, SqlState & Native, Msg, SQL_MAX_MESSAGE_LENGTH , & MsgLen); #else \t \t nRet = SQLGetDiagRec (_htype, _hndle, ich, SqlState, & NativeError, Msg, SQL_MAX_MESSAGE_LENGTH, & MsgLen); #endif Wir haben definitiv sowohl _UNICODE und UNICODE definiert und der Zeichensatz ist auf den Unicode-Zeichensatz eingestellt, aber anscheinend aus irgendeinem Grund funktionierte das Mapping nicht. –