Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Вот такая значит беда:
Однозначно
КД>BCB6+SP4
////////////////////////////////////////////////////////////////////////////////
//class TMyVariant
class TMyVariant:public VARIANT
{
public:
TMyVariant()
{
vt=VT_EMPTY; cout<<"create this=0x"<<hex<<this<<dec<<endl;
}
TMyVariant(const TMyVariant& x)
{
::VariantCopy(this,const_cast<TMyVariant*>(&x));
cout<<"create copy this=0x"<<hex<<this<<dec<<endl;
}
~TMyVariant()
{
::VariantClear(this); cout<<"destroy this=0x"<<hex<<this<<dec<<endl;
}
};//class TMyVariant
//-----------------------------------------------------------------------
const VARIANT __c_variant_null_0=TMyVariant();
VARIANT __variant_null_0=TMyVariant();
//not exists in target code!!!
const TMyVariant __c_variant_null_1(TMyVariant());
//not exists in target code!!!
TMyVariant __variant_null_1(TMyVariant());
const TMyVariant __c_variant_null_2=TMyVariant();
TMyVariant __variant_null_2=TMyVariant();
//-----------------------------------------------------------------------
int main(int /*argc*/, char* /*argv*/[])
{
cout<<"vt c_0:"<<__c_variant_null_0.vt<<endl;
cout<<"vt c_0:"<<__c_variant_null_0.vt<<endl;
//Compiler ERROR: E2294 Structure required on left side of . or .
//cout<<"vt c_1:"<<__c_variant_null_1.vt<<endl;
//Compiler ERROR: E2294 Structure required on left side of . or .
//cout<<"vt c_1:"<<__c_variant_null_1.vt<<endl;
cout<<"vt c_2:"<<__c_variant_null_2.vt<<endl;
cout<<"vt c_2:"<<__c_variant_null_2.vt<<endl;
cout<<"---- main"<<endl;
{
cout<<"lc_0"<<endl;
const VARIANT __c_null_0=TMyVariant();
cout<<"l_0"<<endl;
VARIANT __null_0=TMyVariant();
cout<<"lc_1"<<endl;
const TMyVariant __c_null_1(TMyVariant());
cout<<"l_1"<<endl;
TMyVariant __null_1(TMyVariant());
cout<<"lc_2"<<endl;
const TMyVariant __c_null_2=TMyVariant();
cout<<"lc_2"<<endl;
TMyVariant __null_2=TMyVariant();
}
cout<<"---- main [exit]"<<endl;
return 0;
}
На выход идет:
create this=0x4030a4
create this=0x4030b4
create this=0x4030c4
create this=0x4030d4
vt c_0:0
vt c_0:0
vt c_2:0
vt c_2:0
---- main
lc_0
create this=0x12ff5c
l_0
create this=0x12ff4c
lc_1
l_1
lc_2
create this=0x12ff7c
lc_2
create this=0x12ff6c
destroy this=0x12ff6c
destroy this=0x12ff7c
---- main [exit]
destroy this=0x4030d4
destroy this=0x4030c4
Объекты
__c_variant_null_1
__variant_null_1
__c_null_1
__null_1
вообще не создаются. Плюс проблема с не вызовом деструкторов.
Мне уже становится страшно ...
-- Пользователи не приняли программу. Всех пришлось уничтожить. --