Я занимаюсь разработкой приложения ADO (32-разрядной) в 64-разрядной версии SP1 для Windows 7 (все обновления установлены): приложение должно работать в Win XP. Согласно http://support.microsoft.com/kb/2517589/en-us я использую msado60_backcompat. До недавнего времени это работало хорошо, но теперь терпит крах.
Мой код (фрагменты):
_CommandPtr cmd(__uuidof(Command));
cmd->ActiveConnection = dbconn;
cmd->CommandText = _T("SELECT [si] FROM [TTable] WHERE [TTable].[ti1]=?");
cmd->Parameters->Append(cmd->CreateParameter(L"@ti1", adTinyInt, adParamInput, 1, 7));
CreateParameter реализован в msado60_backcompat:
inline _ParameterPtr Command15::CreateParameter ( _bstr_t Name, enum DataTypeEnum Type, enum ParameterDirectionEnum Direction, ADO_LONGPTR Size, const _variant_t & Value )
{
struct _Parameter * _result = 0;
HRESULT _hr = raw_CreateParameter(Name, Type, Direction, Size, Value, &_result);
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _ParameterPtr(_result, false);
}
raw_CreateParameter () вызывает msado15.dll в CCommand :: CreateParameter. Там происходит сбой по смещению 0x34f (смещение внутри функции):
Исключение первого шанса в 0x655ed5a6 (msado15.dll) в adosqlbugcheck.exe: 0xC0000005: Место записи нарушения прав доступа 0xcccccccc.
Необработанное исключение в 0x655ed5a6 (msado15.dll) в adosqlbugcheck.exe: 0xC0000005: расположение записи нарушения прав доступа 0xcccccccc.
Msado60_Backcompat.tlb: 73728 байт, 29.4.2011
msado15.dll: 6.1.7601.17514, 1019904 байта, 21.11.2010
Ошибка не возникает, если я использую msado15.dll.
Может кто-нибудь воспроизвести ошибку? Есть ли решение?