Ругается линкер на TADOConnection->Errors->Count
От: Kosta  
Дата: 28.05.02 09:36
Оценка:
Подскажите, плз, если кто сталкивался с описанной ниже ситуацией (CBuilder 5 и 6).
Имеется небольшая тестовая программка, в которой присутствует обращение к TADOConnection->Errors->Count, например, таким образом:
   int ErrCount = ADOConnection1->Errors->Count;

У 5-го Builder'а на эту строчку претензий не возникает, и на этапе выполнения все работает корректно. А вот в 6-м Builder'е линкер выдает следующее:
[Linker Error] Unresolved external 'System::__linkproc__ __fastcall CheckAutoResult()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|syssupp

В чем здесь дело? Если нужно что-то еще подключить, то никак не могу разобраться — что именно?
Или это тот случай, когда нужно ждать выхода Update от Borland?
Заранее спасибо.
Re: Ругается линкер на TADOConnection->Errors->Count
От: Holms США  
Дата: 28.05.02 13:58
Оценка:
Здравствуйте Kosta, Вы писали:

K>Подскажите, плз, если кто сталкивался с описанной ниже ситуацией (CBuilder 5 и 6).

K>Имеется небольшая тестовая программка, в которой присутствует обращение к TADOConnection->Errors->Count, например, таким образом:
K>
K>   int ErrCount = ADOConnection1->Errors->Count;
K>

K>У 5-го Builder'а на эту строчку претензий не возникает, и на этапе выполнения все работает корректно. А вот в 6-м Builder'е линкер выдает следующее:
K>[Linker Error] Unresolved external 'System::__linkproc__ __fastcall CheckAutoResult()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|syssupp

K>В чем здесь дело? Если нужно что-то еще подключить, то никак не могу разобраться — что именно?

K>Или это тот случай, когда нужно ждать выхода Update от Borland?
K>Заранее спасибо.

Если у тебя 6-ой Билдер то тогда это баг Билдера. У меня было такое же когда перевел проект с 5-го на 6-ой.
В 5-ом работает. Может нужен какой-то update но на сайте Борланда ничего не нашел про это.
The life is relative and reversible.
Re: Уже не ругается...
От: Kosta  
Дата: 30.05.02 10:59
Оценка:
Поборолось-таки. Вместо TADOConnection->Errors->Count используем TADOConnection->Errors->Get_Count( int& ). Это выглядит примерно так:
[code]
int ErrCount;
_di_Error ErrItem;
WideString wsDescription;
int iNativeError;
int iNumber;
WideString wsSource;
WideString wsSQLState;

ADOConnection1->Errors->Get_Count(ErrCount); // вместо Errors->Count

for (int i=0;i<ErrCount;i++)
{
ADOConnection1->Errors->Get_Item(i,ErrItem); // вместо Errors->Item[i]
ErrItem->Get_Description(wsDescription); // вместо Item[i]->Description
ErrItem->Get_NativeError(iNativeError); // вместо Item[i]->NativeError
ErrItem->Get_Number(iNumber); // вместо Item[i]->Number
ErrItem->Get_Source(wsSource); // вместо Item[i]->Source
ErrItem->Get_SQLState(wsSQLState); // вместо Item[i]->SQLState

<обработка полученных значений>
}
[\code]
Не знаю, насколько удачно, но работает...
Re: Ругается линкер на TADOConnection->Errors->Count
От: Alex01  
Дата: 21.06.03 10:50
Оценка:
Здравствуйте, Kosta, Вы писали:

K>Подскажите, плз, если кто сталкивался с описанной ниже ситуацией (CBuilder 5 и 6).

K>Имеется небольшая тестовая программка, в которой присутствует обращение к TADOConnection->Errors->Count, например, таким образом:
K>
K>   int ErrCount = ADOConnection1->Errors->Count;
K>

K>У 5-го Builder'а на эту строчку претензий не возникает, и на этапе выполнения все работает корректно. А вот в 6-м Builder'е линкер выдает следующее:
K>[Linker Error] Unresolved external 'System::__linkproc__ __fastcall CheckAutoResult()' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|syssupp

K>В чем здесь дело? Если нужно что-то еще подключить, то никак не могу разобраться — что именно?

K>Или это тот случай, когда нужно ждать выхода Update от Borland?
K>Заранее спасибо.

Это ошибка вызова в модуле syssupp.cpp функции CheckSafecallResult, вызывающей функцию CheckAutoResult

для исправления возможно добавить к проекту модуль

// syssupp1.cpp: Модуль исправления бага от Borland

#pragma inline

#include <system.hpp>

// ensure near is visible to TASM
#if defined(near)
#undef near
#endif

namespace System
{
    #pragma argsused
        void __fastcall CheckSafecallResult(HRESULT hr)
    {
        asm
        {
            //extrn    @System@@CheckAutoResult$qqrv:near - так в Borland
            //call    @System@@CheckAutoResult$qqrv      - так в Borland
            extrn    @System@@CheckAutoResult$qqrl:near  // так должно быть
            call    @System@@CheckAutoResult$qqrl       // так должно быть
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.