Je rencontre un problème avec l'appel de SQLGetDiagRec. Cela fonctionne très bien en mode ascii, mais en unicode, cela bloque notre application, et je ne vois pas pourquoi. Toute la documentation que j'ai pu trouver semble indiquer qu'il devrait gérer le commutateur ascii/unicode en interne. Le code que j'utilise est:SQLGetDiagRec provoque un blocage dans la version de publication 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;
}
Tout va bien jusqu'à ce que cette fonction tente de revenir, puis l'application se bloque. Il ne revient jamais à la ligne de code après l'appel de get_sqlErrorInfo.
Je sais que c'est où le problème est parce que j'ai mis le code de diagnostic dedans et il passe le SQLGetDiagRec d'accord et il fnishes cette fonction.
Si je commente la ligne SQLGetDiagRec cela fonctionne très bien.
Cela fonctionne toujours bien sur ma boîte de développement si elle est en cours d'exécution ou de débogage.
Toute aide sur ce problème serait grandement appréciée. Merci
Vous pourriez avoir compilé le projet avec _UNICODE et UNICODE définis, qui auraient mappé SQLGetDiagRec à SQLGetDiagRecW. Dans Visual Studio, la méthode la plus simple consiste à accéder aux propriétés de votre projet Général-> Jeu de caractères = Utiliser le jeu de caractères Unicode. –
Je vois dans le code Windows qu'il ressemble à ce shoudl la carte, mais il plantait jusqu'à ce que je exlicitly ai fait: #ifdef _UNICODE \t \t nRet = SQLGetDiagRecW (_htype, _hndle, i, SqlState, & NativeError, Msg, SQL_MAX_MESSAGE_LENGTH , & MsgLen); #else \t \t nRet = SQLGetDiagRec (_htype, _hndle, i, SqlState, et NativeError, Msg, SQL_MAX_MESSAGE_LENGTH, & MsgLen); #endif Nous avons bien défini _UNICODE et UNICODE et le jeu de caractères est défini sur le jeu de caractères Unicode, mais apparemment, pour une raison quelconque, le mappage ne fonctionnait pas. –