Getting string value from Text field: my 2.5 code stopped
 working
    Ruslan Zasukhin 
    sunshine at public.kherson.ua
       
    Fri May 16 01:15:30 CDT 2008
    
    
  
On 5/16/08 2:51 AM, "Matthew Jew" <mjew at icnc.com> wrote:
Hi Matthew, 
> Another follow up:
> 
> While the above fix worked for the quoted line, there are a few other
> cases
> where a dynamic_cast was used, but in a different way:
> 
> When adding:
> 
> FBL::I_ValueDate_Ptr pvd = fbl_dynamic_cast<I_ValueDate>
> ( anArticleTable->date->get_Value(forAdd) );
> pvd->put_Date( year, month, day );
> FBL::I_ValueTime_Ptr pvt = fbl_dynamic_cast<I_ValueTime>
> ( anArticleTable->time->get_Value(forAdd) );
> pvt->put_Time( hour, minute, second, 0 );
> 
> 
> Working with date values:
> 
> Const_I_Value_Ptr pv = anArticleTable->date->get_Value();
> Const_I_ValueDateTime_Ptr pvdt = fbl_dynamic_cast<const
> I_ValueDateTime>( pv );
> 
> 
> Working with a binary field:
> 
> FBL::Const_I_ValueBinary_Ptr pvfb = fbl_dynamic_cast<const
> I_ValueBinary>( anArticleTable->fingerPrint->get_Value() );
> pvfb->get_Data( (uchar*) fpBuffer, kBytesInFingerPrint );
> [aPVArticle setFingerPrint: (FingerPrint *) fpBuffer];
> 
> Getting a field pointer:
> 
> I_FldString_Ptr pStringField = fbl_dynamic_cast<I_FldString>
> ( anArticleTable->subjectByWordsUpper );
> 
> Updating:
> 
> I_ValueDateTime_Ptr pvdt1 = fbl_dynamic_cast<I_ValueDateTime>
> ( aNewsgroupTable->lastTimeIndexed->get_Value( forUpdate ) );
> pvdt1->put_DateTime( nowDateTimeRec.year, nowDateTimeRec.month,
> nowDateTimeRec.day, nowDateTimeRec.hour, nowDateTimeRec.minute,
> nowDateTimeRec.second, 0 );
> 
> It does not seem clear to me how I would accomplish the equivalent
> functionality, especially in the "forAdd" and "forUpdte" cases.
ForAdd and forUpdate  are not related at all here.
Your line
FBL::I_ValueDate_Ptr pvd = fbl_dynamic_cast<I_ValueDate>
                            ( anArticleTable->date->get_Value(forAdd) );
In fact contains two actions:
 I_Value_Ptr pv = anArticleTable->date->get_Value(forAdd);
 FBL::I_ValueDate_Ptr pvd = fbl_dynamic_cast<I_ValueDate>( pv );
Right?
So dynamic_cast<>() is just casting of POINT from one class to another.
    Class2 pClass2 = fbl_dynamic_cast<Class2>( pClass1 );
QueryInterface is its analog with syntax
    Class2 pClass2 = QI( pClass1, Class2 );
Easy?
** Just keep in mind that QueryInterface can be used only for
interface-classes of Valentina and its sub-classes.
For example:
    FIELD expose I_Field, I_Localizable, I_Encryptable interfaces.
So if you have 
    I_Field_Ptr pField = ...
    I_Encryptable pe = QI( pField, I_Encryptable  );
SEMANTIC of this operation is:
    you have object,
    you ask: Hey object, do you expose THIS interface?
    if yes -- you get pointer on the same object but casted to that
interface.
    if no -- you get NULL like with dynamic_cast<>() of C++
-- 
Best regards,
Ruslan Zasukhin
VP Engineering and New Technology
Paradigma Software, Inc
Valentina - Joining Worlds of Information
http://www.paradigmasoft.com
[I feel the need: the need for speed]
    
    
More information about the Valentina
mailing list