SQLGetDiagRec에 대한 호출에 문제가 있습니다. 그것은 아스키 모드에서 잘 작동하지만 유니 코드에서 우리의 응용 프로그램이 충돌을 일으키고, 나는 단지 왜 볼 수 없습니다. 내가 찾은 모든 문서는 내부적으로 ascii/unicode 스위치를 처리해야한다는 것을 나타냅니다. 내가 사용하는 코드는 다음과 같습니다.유니 코드 릴리스 빌드에서 SQLGetDiagRec이 충돌을 일으킴
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 라인에 주석을 달면 잘 동작합니다.
릴리스 또는 디버그가 실행 중인지 여부에 상관없이 항상 내 개발 상자에서 정상적으로 작동합니다.
이 문제에 대한 도움을 주시면 감사하겠습니다. 감사합니다.
_UNICODE 및 UNICODE를 정의하여 SQLGetDiagRec를 SQLGetDiagRecW로 매핑 한 프로젝트를 컴파일 할 수있었습니다. Visual Studio에서 가장 쉬운 방법은 프로젝트의 속성 General-> Character Set = Use Unicode Character set로 이동하는 것입니다. –
난 내가 exlicitly했다 때까지, 그러나 그것은 충돌했다, 그것은지도 shoudl 것처럼 보이는 창 코드에서 참조 할 : #ifdef와의 _UNICODE \t \t nRet = SQLGetDiagRecW (_htype, _hndle, 난, SQLSTATE, NativeError, 메시지, SQL_MAX_MESSAGE_LENGTH , & MsgLen); #else \t \t nRet = SQLGetDiagRec (_htype, _hndle, i, SqlState, & NativeError, Msg, SQL_MAX_MESSAGE_LENGTH, & MsgLen); #endif 우리는 확실히 _UNICODE와 UNICODE를 모두 정의하고 문자 세트가 유니 코드 문자 세트로 설정되어 있지만 분명히 어떤 이유로 매핑이 작동하지 않습니다. –