⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 el_base.cpp

📁 PQDIF软件包(SDK,Software Development Kit),它能转换、生成并且显示PQDIF文件.对于开发电力系统的数据输出非常有用。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                //  need to fix
                //  SAFEARRAY?
                //value.vt = VT_ARRAY;
                //value.parray = NULL;

                //  In string form ("real imag")
//                strRep = _T( "" );
                strRep = "";
                char szBuffer[64];

                if( m_typePhysical == ID_PHYS_TYPE_COMPLEX8 )
                    {
                    sprintf( szBuffer, "%.8g %.8g",
                        m_value.complex8.real,
                        m_value.complex8.image );
                    strRep = szBuffer;
                    }
                else
                    {
                    sprintf( szBuffer, "%.16g %.16g",
                        m_value.complex16.real,
                        m_value.complex16.image );
                    strRep = szBuffer;
                    }

                value.vt = VT_BSTR;
                value.SetString(strRep.c_str());
                break;

            //  Date/time
            case ID_PHYS_TYPE_TIMESTAMPPQDIF     :
                value.vt = VT_DATE;
                value.date = (double) m_value.ts.day
                        +  ( (double) m_value.ts.sec / (double) SECONDS_PER_DAY );
                break;

            //  GUID
            case ID_PHYS_TYPE_GUID               :
                status = theSupport.NewVariantArrayFromGUID( value, m_value.guid );
                //  need to fix
                //  SAFEARRAY?
                //value.vt = VT_ARRAY;
                //value.parray = NULL;
                //unsigned char ** pstrRPC;
                //  Generate a GUID string
                //UuidToString( &m_value.guid, pstrRPC );
                //RpcStringFree( pstrRPC );

                //  String in this format:
                //  {89738618-F1C3-11cf-9D89-0080C72E70A3}
                //{
                //char * pstr = strRep.GetBuffer( 64 );
                //sprintf( pstr, "{%08.8lx-%04.4x-%04.4x-%02.2x%02.2x%02.2x%02.2x}",
                //    m_value.guid.Data1,
                //    m_value.guid.Data2,
               //     m_value.guid.Data3,
                //    (short) m_value.guid.Data4[ 0 ],
                //    (short) m_value.guid.Data4[ 1 ],
                //    (short) m_value.guid.Data4[ 2 ],
                //    (short) m_value.guid.Data4[ 3 ]
                //    );
                //strRep.ReleaseBuffer();
                //}
                //  Return it back in the variant...
                //value.vt = VT_BSTR | VT_BYREF;
                //*value.pbstrVal = strRep.AllocSysString();
                //value.vt = VT_BSTR;
                //value.bstrVal = strRep.AllocSysString();
                break;

            default:
                status = false;
                break;
            }
        }

    return status;
    }

bool CPQDIF_Element::convertFromDouble( double valueSource, PQDIFValue& valueTarget ) const
{
    bool    status = true;

    //  First, verify the variant physical type matches
    //  (and pull out the integer values)
    if( status )
    {
        switch( m_typePhysical )
        {
            case ID_PHYS_TYPE_BOOLEAN1           :
                valueTarget.bool1 = (BOOL1) valueSource;
                break;
            case ID_PHYS_TYPE_BOOLEAN2           :
                valueTarget.bool2 = (BOOL2) valueSource;
                break;
            case ID_PHYS_TYPE_BOOLEAN4           :
                valueTarget.bool4 = (BOOL4) valueSource;
                break;

            case ID_PHYS_TYPE_CHAR1              :
                valueTarget.char1 = (CHAR1) valueSource;
                break;
            case ID_PHYS_TYPE_INTEGER1           :
                valueTarget.int1 = (INT1) valueSource;
                break;
            case ID_PHYS_TYPE_UNS_INTEGER1       :
                valueTarget.uint1 = (UINT1) valueSource;
                break;

            case ID_PHYS_TYPE_CHAR2              :
                valueTarget.char2 = (CHAR2) valueSource;
                break;
            case ID_PHYS_TYPE_INTEGER2           :
                valueTarget.int2 = (INT2) valueSource;
                break;
            case ID_PHYS_TYPE_UNS_INTEGER2       :
                valueTarget.uint2 = (UINT2) valueSource;
                break;

            case ID_PHYS_TYPE_INTEGER4           :
                valueTarget.int4 = (INT4) valueSource;
                break;
            case ID_PHYS_TYPE_UNS_INTEGER4       :
                valueTarget.uint4 = (UINT4) valueSource;
                break;

            //  Real/complex
            case ID_PHYS_TYPE_REAL4              :
                valueTarget.real4 = (REAL4) valueSource;
                break;
            case ID_PHYS_TYPE_REAL8              :
                valueTarget.real8 = (REAL8) valueSource;
                break;

            case ID_PHYS_TYPE_COMPLEX8           :
                valueTarget.complex8.real = (REAL4) valueSource;
                valueTarget.complex8.image = 0.0;
                break;

            case ID_PHYS_TYPE_COMPLEX16          :
                valueTarget.complex16.real = (REAL4) valueSource;
                valueTarget.complex16.image = 0.0;
                break;

            //  Date/time
            case ID_PHYS_TYPE_TIMESTAMPPQDIF     :
                //  From the documentation, it appears that the 
                //  whole number portion of the DATE is compatible
                //  with our .day member. (Although it is possible that
                //  they will be off by 1 day...)
                valueTarget.ts.day = (UINT4) ( valueSource );

                //  Convert the fractional day to fractional seconds.
                valueTarget.ts.sec = (REAL8) ( valueSource - (double) valueTarget.ts.day );
                valueTarget.ts.sec *= (REAL8) SECONDS_PER_DAY;
                break;

            //  GUID
            case ID_PHYS_TYPE_GUID               :
                //  Cannot convert from double.
                break;

            default:
                status = false;
                break;
        }
    }

    return status;
}


bool CPQDIF_Element::convertToDouble( const PQDIFValue& valueSource, double& valueTarget ) const
{
    bool    status = true;

    valueTarget = 0.0;

    if( status )
    {
        switch( m_typePhysical )
        {
            case ID_PHYS_TYPE_BOOLEAN1           :
                valueTarget = (double) valueSource.bool1;
                break;

            case ID_PHYS_TYPE_CHAR1              :
                valueTarget = (double) valueSource.char1;
                break;

            case ID_PHYS_TYPE_INTEGER1           :
                valueTarget = (double) valueSource.int1;
                break;

            case ID_PHYS_TYPE_UNS_INTEGER1       :
                valueTarget = (double) valueSource.uint1;
                break;

            case ID_PHYS_TYPE_BOOLEAN2           :
                valueTarget = (double) valueSource.bool2;
                break;

            case ID_PHYS_TYPE_CHAR2              :
                //  Single-char Unicode string instead?
                valueTarget = (double) valueSource.char2;
                break;
            
            case ID_PHYS_TYPE_INTEGER2           :
                valueTarget = (double) valueSource.int2;
                break;

            case ID_PHYS_TYPE_UNS_INTEGER2       :
                valueTarget = (double) valueSource.uint2 ;
                break;

            case ID_PHYS_TYPE_BOOLEAN4           :
                valueTarget = (double) valueSource.bool4;
                break;

            case ID_PHYS_TYPE_INTEGER4           :
                valueTarget = (double) valueSource.int4;
                break;

            case ID_PHYS_TYPE_UNS_INTEGER4       :
                valueTarget = (double) valueSource.uint4;
                break;

            //  Real/complex
            case ID_PHYS_TYPE_REAL4              :
                valueTarget = (double) valueSource.real4;
                break;

            case ID_PHYS_TYPE_REAL8              :
                valueTarget = (double) valueSource.real8;
                break;

            case ID_PHYS_TYPE_COMPLEX8           :
            case ID_PHYS_TYPE_COMPLEX16          :
                //  Cannot convert to double.
                break;

            //  Date/time
            case ID_PHYS_TYPE_TIMESTAMPPQDIF     :
                //valueTarget.vt = VT_DATE;
                valueTarget = (double) valueSource.ts.day
                        +  ( (double) valueSource.ts.sec / (double) SECONDS_PER_DAY );
                break;

            //  GUID
            case ID_PHYS_TYPE_GUID               :
                //  Cannot convert to double.
                break;

            default:
                status = false;
                break;
        }
    }

    return status;
}


long CPQDIF_Element::getNumBytesOfType( void ) const 
{ 
    return theInfo.GetNumBytesOfType( m_typePhysical ); 
}


BYTE * CPQDIF_Element::getPointerToValue( PQDIFValue& value ) const 
{ 
    return theInfo.GetPtrToDataValue( m_typePhysical, value ); 
}


const BYTE * CPQDIF_Element::getPointerToValue( const PQDIFValue& value ) const
{
    return theInfo.GetPtrToDataValue( m_typePhysical, value ); 
}


void CPQDIF_Element::copy( const CPQDIF_Element& obj )
{
    m_tag = obj.m_tag;
    m_typePhysical = obj.m_typePhysical;
    m_changed = obj.m_changed;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -