Msado60_Backcompat аварийно завершает работу в CCommand :: CreateParameter

Я разрабатываю приложение ADO (32-разрядное) для 64-разрядной версии Windows 7 SP1 (все обновления установлены): Приложение должно работать на 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.

Может кто-нибудь воспроизвести ошибку? Есть ли решение?

5
задан Werner Henze 9 July 2013 в 13:54
поделиться